我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
我在我的iOS应用程序中有一个UITextView,它显示大量的文本。
然后,我通过使用UITextView的offset margin参数来分页此文本。
我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。
是否有可能移除UITextView内容周围的填充?
当前回答
做插入解决方案,我仍然有填充在右侧和底部。文本对齐也会导致问题。我找到的唯一可靠的方法是将文本视图放在另一个被剪切到边界的视图中。
其他回答
在iOS 5上UIEdgeInsetsMake(-8,-8,-8,-8);看起来效果不错。
textView滚动也会影响文本的位置,使它看起来不是垂直居中。我通过禁用滚动并将顶部插入设置为0来设法将文本置于视图的中心:
textView.scrollEnabled = NO;
textView.textContainerInset = UIEdgeInsetsMake(0, textView.textContainerInset.left, textView.textContainerInset.bottom, textView.textContainerInset.right);
由于某种原因,我还没有弄清楚,在开始输入之前,光标仍然没有居中,但当我开始输入时,文本立即居中。
你需要在didMoveToSuperView上设置inset和lineFragmentPadding
@IBDesignable class UITextViewFixed: UITextView {
override func didMoveToSuperview() {
super.didMoveToSuperview()
setup()
}
func setup() {
textContainerInset = UIEdgeInsets.zero
textContainer.lineFragmentPadding = 0
}
}
这个解决方案是在2009年iOS 3.0发布时编写的。它不再适用。
我遇到了完全相同的问题,最后我不得不吸毒
nameField.contentInset = UIEdgeInsetsMake(-4, -8, 0, 0);
其中nameField是一个UITextView。我使用的字体是Helvetica 16号。这只是我所绘制的特定字段大小的自定义解决方案。这使得左偏移量与左侧齐平,以及我想要它被绘制的盒子的顶部偏移量。
此外,这似乎只适用于你使用默认对齐的UITextViews,即,
nameField.textAlignment = NSTextAlignmentLeft;
例如,向右对齐,UIEdgeInsetsMake似乎对右边缘没有任何影响。
至少,使用. contentinset属性允许你将字段放置在“正确”的位置,并在不偏移UITextViews的情况下调整偏差。
对于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)