我在我的iOS应用程序中有一个UITextView,它显示大量的文本。

然后,我通过使用UITextView的offset margin参数来分页此文本。

我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。

是否有可能移除UITextView内容周围的填充?


当前回答

如果有人正在寻找最新的Swift版本,那么下面的代码可以很好地与Xcode 10.2和Swift 4.2一起工作

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

其他回答

这个解决方案是在2009年iOS 3.0发布时编写的。它不再适用。

我遇到了完全相同的问题,最后我不得不吸毒

nameField.contentInset = UIEdgeInsetsMake(-4, -8, 0, 0);

其中nameField是一个UITextView。我使用的字体是Helvetica 16号。这只是我所绘制的特定字段大小的自定义解决方案。这使得左偏移量与左侧齐平,以及我想要它被绘制的盒子的顶部偏移量。

此外,这似乎只适用于你使用默认对齐的UITextViews,即,

nameField.textAlignment = NSTextAlignmentLeft;

例如,向右对齐,UIEdgeInsetsMake似乎对右边缘没有任何影响。

至少,使用. contentinset属性允许你将字段放置在“正确”的位置,并在不偏移UITextViews的情况下调整偏差。

做插入解决方案,我仍然有填充在右侧和底部。文本对齐也会导致问题。我找到的唯一可靠的方法是将文本视图放在另一个被剪切到边界的视图中。

我找到了另一种方法。从UITextView的子视图中获取带有文本的视图,并在子类的layoutSubview方法中设置它:

- (void)layoutSubviews {
    [super layoutSubviews];

    const int textViewIndex = 1;
    UIView *textView = [self.subviews objectAtIndex:textViewIndex];
    textView.frame = CGRectMake(
                                 kStatusViewContentOffset,
                                 0.0f,
                                 self.bounds.size.width - (2.0f * kStatusViewContentOffset),
                                 self.bounds.size.height - kStatusViewContentOffset);
}

对于iOS 10,下面这行代码用于移除顶部和底部填充。

captionTextView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0)

如果你想要设置一个HTML字符串并避免底部填充,请确保你没有使用块标记,即div和p。

对我来说,这就是原因。您可以通过替换出现的块标记来轻松测试它,例如,span标记。