我在contentInsets
中遇到了一些奇怪的事情我的故事板中有一个UITextView,其中contentInset为50,因为我正在尝试为我的uitextview添加一些填充
但是,uitextview底部会显示一个滚动条,如下面的测试所示:
我的印象是,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
添加代码的视图与添加之前的视图之间存在无可见差异,因此出现了问题! (感谢)
答案 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而没有导致这个水平滚动条...
我担心这不是contentInset
与UITextView
一起使用的方式。有关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
中实现水平填充外观的最佳方法是将其放置在容器UIView
内。在您的情况下,只需创建一个与当前文本视图大小相同的UIView
,并在容器视图中添加一个50px更窄的文本视图。
如果您的文字视图有背景,这种解决方法可能会导致问题,但从上面的屏幕截图来看,这似乎不适合您。
UITextView
容器内的 UIView
(红框):
如果您的UITextView
确实有背景,请参阅:
希望有所帮助,如果有人能找到更好的解决方案,我很乐意听到它!