【问题标题】:Adding left margin to UITextView将左边距添加到 UITextView
【发布时间】:2011-10-24 00:19:51
【问题描述】:

我正在尝试向 UITextView 添加左边距。

我已经尝试设置属性 contentInset,见下文:

UITextView *textView = [[UITextView alloc] initWithFrame: CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height)];
textView.editable = YES;
textView.autoresizingMask = UIViewAutoresizingFlexibleHeight;
textView.backgroundColor = [UIColor clearColor];
textView.opaque = NO;
textView.contentInset = UIEdgeInsetsMake(0, 15.0f, 0, 0);

这似乎可行,尽管它会导致我不想要的 TextView 上的水平滚动。

我只希望在左侧插入文本而不使文本视图更宽。

【问题讨论】:

  • 我误读了这个问题,或者它一定是睡着了。我现在已经删除了我的答案。对此感到抱歉。
  • 由于继承自uiscrollview,可以独立控制滚动动作。但是,由于您需要滚动,您可以尝试在水平方向设置 framesize = actualframesize - inset。这只是一个建议,您可以尝试一下。

标签: iphone ios uiscrollview uitextview


【解决方案1】:

如果你通过 IB 来做会容易得多。找到名为 Scroll View Size 的面板并设置 Content Insets。

在代码中,你可以尝试将scrollEnabled设置为NO。

【讨论】:

    【解决方案2】:

    UITextView 在内部使用 Web 视图实现。这些内部使用了许多未记录的技巧,这些技巧也会在操作系统更新之间发生变化。其中一个技巧是一次又一次地重置contentInsets 属性。何时以及为什么没有记录,据我所知,对文本视图布局的任何更改都可以/将触发此重置。

    我的第一个建议是不要尝试调整文本视图的插图。它只是脆弱,将来可能会破裂。

    如果你真的坚持,那么我会继承 UITextView,覆盖 -[UITextView layoutSubviews] 并在那里强制插入新的。

    在任何一种情况下,我都会去 http://bugreport.apple.com 并将当前行为报告为严重错误。

    【讨论】:

      【解决方案3】:

      如果你只想移动文本,试试

      [textView setContentInset:UIEdgeInsetsMake(<#CGFloat top#>, <#CGFloat left#>, <#CGFloat bottom#>, <#CGFloat right#>)];
      

      正数将“文本框”移向中间,负数将其从中间移出。

      例如,[textView setContentInset:UIEdgeInsetsMake(0, 20, 0,-20)],会将文本向右移动 20 个像素!

      【讨论】:

        【解决方案4】:

        对我有用的唯一方法是对 UITextView 进行子类化并覆盖以下方法:

            - (id)styleString
        {
            return [[super styleString] stringByAppendingString:@"; line-height: 1.6em;margin-right: 30px; margin-left: 45px; margin-top: 20px;"];
        }
        

        显然;你可以调整margin-left、margin-top和任何你想要的;)


        关于将 UITextView 放在更大的 UIView 中的建议对我不起作用,因为我需要在 UITextView 的背景中滚动线条,我使用以下开源项目来做到这一点: https://github.com/aahsanali/NoteView

        此外,以下解决方案根本没有帮助我:

        [textView setContentInset:UIEdgeInsetsMake(0, 20, 0,-20)]
        

        因为它没有正确换行。

        我希望这个解决方案能有所帮助,因为我花了一周时间研究这个简单的 UI 调整!

        【讨论】:

        • 太棒了。谢谢。
        【解决方案5】:

        请记住,对于 iOS 7,有一个名为

        的特殊属性

        textContainerInset 文本容器布局区域的 inset 在文本视图的内容区域内。

        @property(nonatomic, assign) UIEdgeInsets textContainerInset

        此属性为布局的文本提供文本边距 文本视图。

        可用性 适用于 iOS 7.0 及更高版本。在 UITextView.h 中声明

        在 iOS 6 中 contentInset 正在做这项工作。我个人遇到过这个问题。一切都结束了:

        if (isIOS7()) {
            textView.textContainerInset = UIEdgeInsetsMake(0, 10, 0, 10);
        } else {
            textView.contentInset = UIEdgeInsetsMake(0, 10, 0, 10);
        }
        

        【讨论】:

        • 啊!最后!想知道为什么它不能在 iOS 7 上运行。谢谢。
        • textContainerInset 为我创造了奇迹。我的 iPhone 6 (iOS 8.1) 上的 contentInset 不起作用,但 textContainerInset 就像一个魅力。谢谢!
        【解决方案6】:

        您可以使用 Swift 3.0

        尝试以下代码
        // Align the text to the left edge of textContainer
        textView.textContainer.lineFragmentPadding = 16
        // Align the text with the top of textContainer
        textView.textContainerInset = UIEdgeInsets.zero
        

        它对我有用。

        【讨论】:

          猜你喜欢
          • 2011-08-06
          • 2015-04-12
          • 2021-10-15
          • 2016-03-12
          • 1970-01-01
          • 2014-03-02
          • 2013-02-18
          • 2021-04-29
          • 2013-12-03
          相关资源
          最近更新 更多