79

我在 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

添加代码的视图与添加之前的视图之间没有明显的差异,所以出了点问题(谢谢)

4

2 回答 2

195

在 iOS 7UITextView中是基于 TextKit 并且有一个新的属性textContainerInset。它的行为与您预期的一样:

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

斯威夫特 4.2

textView.textContainerInset = UIEdgeInsets(top: 0, left: 50, bottom: 0, right: 0)
于 2013-11-18T16:28:38.340 回答
136

更新:此解决方案自 iOS 7 起已过时。

请参阅下面的答案。在 iOS 7.0 中,引入了textContainerInseton 属性。UITextView

目标-C:

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

迅速:

textView.textContainerInset = UIEdgeInsets(top: 0, left: 50, bottom: 0, right: 0)

或者正如Zeev Vax建议的那样,在 Swift 5.0 中:

textView.textContainerInset.left = 50

iOS 7 之前的解决方案:

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

恐怕这不是contentInsetUITextView. 请参阅Apple 的文档以了解contentInset其中的说明:

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

围绕内容添加contentInset


您可以使用上面包含的代码更改contentSizein :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 在右侧被切断


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

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

UITextView(红色框)UIView容器内:

容器 UIView 内的 UITextView

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

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

于 2013-09-04T02:17:25.250 回答