我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
当前回答
对我来说(iOS 11和Xcode 9.4.1),神奇的工作是设置textView。字体属性为UIFont.preferred(forTextStyle:UIFontTextStyle)风格,也是Fattie提到的第一个答案。但胖子的答案没有工作,直到我设置textView。字体属性。否则UITextView行为不稳定。
其他回答
基于已经给出的一些好的答案,这里是一个纯基于Storyboard / Interface builder的解决方案,适用于iOS 7.0+
为以下键设置UITextView的用户定义运行时属性:
textContainer.lineFragmentPadding
textContainerInset
textView滚动也会影响文本的位置,使它看起来不是垂直居中。我通过禁用滚动并将顶部插入设置为0来设法将文本置于视图的中心:
textView.scrollEnabled = NO;
textView.textContainerInset = UIEdgeInsetsMake(0, textView.textContainerInset.left, textView.textContainerInset.bottom, textView.textContainerInset.right);
由于某种原因,我还没有弄清楚,在开始输入之前,光标仍然没有居中,但当我开始输入时,文本立即居中。
以下是胖子非常有用的答案的更新版本。 它增加了两行重要的行,帮助我在iOS 10和11上(可能在较低的版本上也是如此)让布局正常运行:
@IBDesignable class UITextViewFixed: UITextView {
override func layoutSubviews() {
super.layoutSubviews()
setup()
}
func setup() {
translatesAutoresizingMaskIntoConstraints = true
textContainerInset = UIEdgeInsets.zero
textContainer.lineFragmentPadding = 0
translatesAutoresizingMaskIntoConstraints = false
}
}
重要的几行是两个translatesAutoresizingMaskIntoConstraints = <true/false>语句!
这令人惊讶地删除了我所有环境中的所有边缘!
虽然textView不是第一个响应器,但可能会发生一些奇怪的底边距无法使用接受的答案中提到的sizeThatFits方法解决的情况。
当敲入textView,突然奇怪的底部边缘消失了,一切看起来像它应该,但只要textView有firstResponder。
所以我在Stack Overflow上读到,启用和禁用translatesAutoresizingMaskIntoConstraints在调用之间手动设置帧/边界时确实有帮助。
幸运的是,这不仅适用于框架设置,而且还适用于夹在两个translatesAutoresizingMaskIntoConstraints调用之间的两行setup() !
例如,当在UIView上使用systemlayoutsizefiting计算视图的帧时,这是非常有用的。它会返回正确的大小(以前它没有)!
如原文所述:
不要忘记在检查器中关闭scrollEnabled !这个解决方案在故事板和运行时都能正常工作。
就是这样,现在你真的完成了!
对于iOS 10,下面这行代码用于移除顶部和底部填充。
captionTextView.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0)
对我来说(iOS 11和Xcode 9.4.1),神奇的工作是设置textView。字体属性为UIFont.preferred(forTextStyle:UIFontTextStyle)风格,也是Fattie提到的第一个答案。但胖子的答案没有工作,直到我设置textView。字体属性。否则UITextView行为不稳定。