我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
当前回答
基于已经给出的一些好的答案,这里是一个纯基于Storyboard / Interface builder的解决方案,适用于iOS 7.0+
为以下键设置UITextView的用户定义运行时属性:
textContainer.lineFragmentPadding
textContainerInset
其他回答
我肯定会避免任何涉及硬编码值的答案,因为实际边距可能会随着用户字体大小设置等而改变。
下面是user1687195的答案,没有修改textContainer。lineFragmentPadding(因为文档声明这不是预期的用法)。
这适用于iOS 7和更高版本。
self.textView.textContainerInset = UIEdgeInsetsMake(
0,
-self.textView.textContainer.lineFragmentPadding,
0,
-self.textView.textContainer.lineFragmentPadding);
这实际上是相同的结果,只是稍微干净一点,因为它没有滥用lineFragmentPadding属性。
[firstNameTextField setContentVerticalAlignment:UIControlContentVerticalAlignmentCenter];
对于Swift 4, Xcode 9
使用下面的函数。它可以改变UITextView中文本的边距/填充:
public func UIEdgeInsetsMake(_ top: CGFloat, _ left: CGFloat, _ bottom: CGFloat, _ right: CGFloat) -> UIEdgeInsets
所以在这种情况下,它是:
self.textView?.textContainerInset = UIEdgeInsetsMake(0, 0, 0, 0)
最新迅速:
self.textView.textContainerInset = .init(top: -2, left: 0, bottom: 0, right: 0)
self.textView.textContainer.lineFragmentPadding = 0
textView滚动也会影响文本的位置,使它看起来不是垂直居中。我通过禁用滚动并将顶部插入设置为0来设法将文本置于视图的中心:
textView.scrollEnabled = NO;
textView.textContainerInset = UIEdgeInsetsMake(0, textView.textContainerInset.left, textView.textContainerInset.bottom, textView.textContainerInset.right);
由于某种原因,我还没有弄清楚,在开始输入之前,光标仍然没有居中,但当我开始输入时,文本立即居中。