我在我的iOS应用程序中有一个UITextView,它显示大量的文本。

然后,我通过使用UITextView的offset margin参数来分页此文本。

我的问题是UITextView的填充使我的计算感到困惑,因为它似乎是不同的,取决于我使用的字体大小和字体。

是否有可能移除UITextView内容周围的填充?


当前回答

你可以使用UITextView的textContainerInset属性:

textView.textContainerInset = UIEdgeInsetsMake(10, 10, 10, 10);

(上,左,下,右)

其他回答

你需要在didMoveToSuperView上设置inset和lineFragmentPadding

@IBDesignable class UITextViewFixed: UITextView {
    override func didMoveToSuperview() {
        super.didMoveToSuperview()
        setup()
    }
    func setup() {
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0
    }
}
[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)

做插入解决方案,我仍然有填充在右侧和底部。文本对齐也会导致问题。我找到的唯一可靠的方法是将文本视图放在另一个被剪切到边界的视图中。

对于iOS 7.0,我发现contentInset技巧不再有效。这是我在iOS 7中用来去除边距/填充的代码。

这将把文本的左边缘带到容器的左边缘:

textView.textContainer.lineFragmentPadding = 0

这将导致文本的顶部与容器的顶部对齐:

textView.textContainerInset = .zero

这两行都需要完全删除空白/填充。