UITextView内容插入

我遇到了一些有点奇怪的contentInsets

我有一个UITextView在我的故事板中有一个剩下的50个contentInset,因为我试图添加一些填充到我的uitextview

但是,在uitextview的底部会出现一个滚动条,如下面的testing所示: 在这里输入图像说明

我的印象是contentInset压缩uitextview而不引起这个水平滚动条,所以我怎样才能删除水平滚动条的需要,并使所有的东西 – 插入和uitextview中的所有文本 – 可见而不需要这个滚动条。

注意:我并没有问及防止水平滚动还是不显示滚动条(因此剪切文本)

非常感谢!

对于atomk(UITextView被称为ss)

NSLog(@"Content Size Before %f",self.ss.contentSize.width); Logs: 280 CGSize size=self.ss.contentSize; size.width=size.width-50; [self.ss setContentSize:size]; NSLog(@"Content Size After %f",self.ss.contentSize.width); Logs: 230 

添加的代码与添加代码之间没有明显的区别,所以出现了问题! (谢谢)

更新:这个解决scheme已经过时了。

在下面看到这个答案 。 在iOS 7.0中,引入了UITextViewtextContainerInset属性:

 textView.textContainerInset = UIEdgeInsetsMake(0, 50, 0, 0); 

Pre-iOS 7解决scheme:

我有一个印象,contentInset挤压uitextview而不会导致这个水平滚动条…

恐怕这不是contentInset如何与UITextView contentInset工作。 有关contentInset 的说明 ,请参阅Apple的文档 :

内容视图从包含的滚动视图中插入的距离…使用此属性添加到内容周围的滚动区域。

contentInset 添加在内容的周围。


您可以使用上面包含的代码更改viewDidLayoutSubviewscontentSize

 - (void)viewDidLayoutSubviews { self.textView.contentInset = UIEdgeInsetsMake(0, 50, 0, 0); NSLog(@"Content Size Before %f",self.textView.contentSize.width); //Logs: 280 CGSize size=self.textView.contentSize; size.width=size.width-50; [self.textView setContentSize:size]; NSLog(@"Content Size After %f",self.textView.contentSize.width); //Logs: 230 } 

但是,这会导致文本在右侧被切断:

UITextView在右侧切断


我已经能够在UITextView实现水平填充的外观的最佳方式是将其放置在容器UIView 。 在你的情况下,只需创build一个与当前文本视图大小相同的UIView ,并在容器视图内添加一个50px的文本视图。

如果您拥有文本视图的背景,则此解决方法可能会导致问题,但是从上面的屏幕截图看来,对于您来说这不是一个问题。

UIView容器内的UITextView (红框):

容器UIView内的UITextView

如果您的UITextView具有背景,请参阅:

  • 如何设置像Notes应用程序的UITextView的内容插图
  • 你从逆向工程Notes.app学到的东西 (参见“iPadding”部分)

希望有所帮助,如果有人能find更好的解决scheme,我很乐意听到!

在iOS 7中, UITextView基于TextKit并具有新的属性textContainerInset 。 它的行为正如你所期望的那样:

 UITextView *textView = ...; // Left inset of 50 points textView.textContainerInset = UIEdgeInsetsMake(0.0, 50.0, 0.0, 0.0);