向UITextView添加左边距

时间:2011-08-10 11:28:13

标签: iphone ios uiscrollview uitextview

我正在尝试向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上的水平滚动。

我只想让左侧的文字插入而不使textview更宽。

6 个答案:

答案 0 :(得分:23)

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

的特殊属性
  

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

     

@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);
}

答案 1 :(得分:16)

如果您只想移动文字,请尝试

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

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

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

答案 2 :(得分:2)

唯一对我有用的是通过对UITextView进行子类化并重写以下方法:

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

显然;你可以调整保证金左边,保证金顶部和无论你想要什么;)


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

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

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

因为它没有正确包装文本。

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

答案 3 :(得分:1)

您可以使用 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

它对我有用。

答案 4 :(得分:0)

如果你通过IB这样做会容易得多。找到名为滚动视图大小&amp;的面板设置内容插入。

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

答案 5 :(得分:0)

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

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

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

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