UITextView内容插入

H B*_*amy 60 objective-c uiscrollview uikit ios

我在contentInsets中遇到了一些奇怪的东西

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

但是,uitextview底部会出现一个滚动条,如下面的测试所示:在此输入图像描述

我的印象是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
Run Code Online (Sandbox Code Playgroud)

没有比加入前添加的代码视图之间明显的区别,因此,一些地方出了错!(谢谢)

Flo*_*ian 174

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

UITextView *textView = ...;
// Left inset of 50 points
textView.textContainerInset = UIEdgeInsetsMake(0.0, 50.0, 0.0, 0.0);
Run Code Online (Sandbox Code Playgroud)

  • 一项建议是,插入结构属性现在是 var (swift 5.0),您可以这样做:textView.textContainerInset.left = 50 (4认同)

Ste*_*arp 95

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

请参阅下面的答案.在iOS 7.0中,引入了textContainerInset属性UITextView:

textView.textContainerInset = UIEdgeInsetsMake(0, 50, 0, 0);
Run Code Online (Sandbox Code Playgroud)

iOS 7之前的解决方案:

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

我担心这不是一个如何contentInset使用UITextView.请参阅Apple的文档,了解contentInset其所在的位置:

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

contentInset添加内容周围.


您可以更改contentSizeviewDidLayoutSubviews使用已包含上面的代码:

- (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
}
Run Code Online (Sandbox Code Playgroud)

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

UITextView在右侧切断


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

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

UITextView(UIView容器内的红框):

容器UIView内的UITextView

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

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