我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
当前回答
如果你想要设置一个HTML字符串并避免底部填充,请确保你没有使用块标记,即div和p。
对我来说,这就是原因。您可以通过替换出现的块标记来轻松测试它,例如,span标记。
其他回答
我找到了另一种方法。从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 11和Xcode 9.4.1),神奇的工作是设置textView。字体属性为UIFont.preferred(forTextStyle:UIFontTextStyle)风格,也是Fattie提到的第一个答案。但胖子的答案没有工作,直到我设置textView。字体属性。否则UITextView行为不稳定。
基于已经给出的一些好的答案,这里是一个纯基于Storyboard / Interface builder的解决方案,适用于iOS 7.0+
为以下键设置UITextView的用户定义运行时属性:
textContainer.lineFragmentPadding
textContainerInset
对于iOS 7.0,我发现contentInset技巧不再有效。这是我在iOS 7中用来去除边距/填充的代码。
这将把文本的左边缘带到容器的左边缘:
textView.textContainer.lineFragmentPadding = 0
这将导致文本的顶部与容器的顶部对齐:
textView.textContainerInset = .zero
这两行都需要完全删除空白/填充。