UITextView内容插入

时间:2013-09-01 16:23:41

标签: ios objective-c uiscrollview uikit

我在contentInsets

中遇到了一些奇怪的事情

我的故事板中有一个UITextView,其中contentInset为50,因为我正在尝试为我的uitextview添加一些填充

但是,uitextview底部会显示一个滚动条,如下面的测试所示:enter image description here

我的印象是,contentInset压缩uitextview而不会导致这个水平滚动条,所以如何删除对水平滚动条的需要并使所有内容 - 插入和uitextview中的所有文本 - 在没有需要这个滚动条。

N.B:我不是要求阻止水平滚动或不显示滚动条(因此剪切文本)

非常感谢!

对于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

添加代码的视图与添加之前的视图之间存在可见差异,因此出现了问题! (感谢)

2 个答案:

答案 0 :(得分:169)

在iOS 7中,UITextView基于TextKit并具有新属性textContainerInset。它的行为与您期望的一样:

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

答案 1 :(得分:87)

更新:从iOS 7开始,此解决方案已过期。

this answer below。在iOS 7.0中,引入了UITextView上的textContainerInset属性:

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

iOS 7之前的解决方案:

  

我的印象是contentInset压缩了uitextview而没有导致这个水平滚动条...

我担心这不是contentInsetUITextView一起使用的方式。有关contentInset的说明,请参阅Apple's documentation

  

内容视图从封闭滚动视图中插入的距离...使用此属性可添加到内容周围的滚动区域。

在内容周围添加了contentInset


您可以使用上面包含的代码更改contentSize中的viewDidLayoutSubviews

- (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 cut off on right side


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

如果您的文字视图有背景,这种解决方法可能会导致问题,但从上面的屏幕截图来看,这似乎不适合您。

UITextView容器内的

UIView(红框):

UITextView inside container UIView

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

希望有所帮助,如果有人能找到更好的解决方案,我很乐意听到它!