【问题标题】:UITextView content insetUITextView 内容插图
【发布时间】:2013-09-04 19:21:49
【问题描述】:

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

添加了代码的视图与添加之前的视图相比没有可见差异,所以出了点问题! (谢谢)

【问题讨论】:

    标签: ios objective-c uiscrollview uikit


    【解决方案1】:

    在 iOS 7 中,UITextView 基于 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)
    

    【讨论】:

    • 一个建议,插入结构属性现在是 var (swift 5.0) 你可以这样做:textView.textContainerInset.left = 50
    【解决方案2】:

    更新:此解决方案在 iOS 7 中已过时。

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

    目标-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's documentation 以获取contentInset 的声明:

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

    contentInset添加在内容周围。


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

    - (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 确实有背景,请参阅:

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

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 2013-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多