我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
当前回答
[firstNameTextField setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
其他回答
对于iOS 7.0,我发现contentInset技巧不再有效。这是我在iOS 7中用来去除边距/填充的代码。
这将把文本的左边缘带到容器的左边缘:
textView.textContainer.lineFragmentPadding = 0
这将导致文本的顶部与容器的顶部对齐:
textView.textContainerInset = .zero
这两行都需要完全删除空白/填充。
你需要在didMoveToSuperView上设置inset和lineFragmentPadding
@IBDesignable class UITextViewFixed: UITextView {
override func didMoveToSuperview() {
super.didMoveToSuperview()
setup()
}
func setup() {
textContainerInset = UIEdgeInsets.zero
textContainer.lineFragmentPadding = 0
}
}
我找到了另一种方法。从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);
}
我肯定会避免任何涉及硬编码值的答案,因为实际边距可能会随着用户字体大小设置等而改变。
下面是user1687195的答案,没有修改textContainer。lineFragmentPadding(因为文档声明这不是预期的用法)。
这适用于iOS 7和更高版本。
self.textView.textContainerInset = UIEdgeInsetsMake(
0,
-self.textView.textContainer.lineFragmentPadding,
0,
-self.textView.textContainer.lineFragmentPadding);
这实际上是相同的结果,只是稍微干净一点,因为它没有滥用lineFragmentPadding属性。
在iOS 5上UIEdgeInsetsMake(-8,-8,-8,-8);看起来效果不错。