如何在UITextView中失去边距/填充?

我的iOS应用程序中有一个UITextView ,它显示大量的文本。 然后我使用UITextView的偏移量边界参数来分页这个文本。 我的问题是UITextView的填充混淆了我的计算,因为它看起来不同,这取决于我使用的字体大小和字体。

因此,我提出了这样的问题:是否有可能删除围绕UITextView内容的填充?

期待听到你的回应!


2018年

这是iOS中最愚蠢的错误之一。

UITextViewFixed通常是一个合理的解决方案:

@IBDesignable class UITextViewFixed: UITextView {
    override func layoutSubviews() {
        super.layoutSubviews()
        setup()
    }
    func setup() {
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0
    }
}

不要忘记在Inspector中关闭scrollEnabled!

该解决方案在故事板以及运行时都能正常工作。

就是这样,你完成了。

一般来说, 这应该是大多数情况下你需要的

(即使您正在动态更改文本视图的高度,例如用户键入的内容,这通常只是您需要的。)

这是来自苹果的破碎的UITextView ...

IB与UITextView截图

在几乎所有情况下, UITextViewFixed都是可接受的修复方法:

IB和UITextViewFixed的屏幕截图

(为了清晰起见,添加了黄色。)请注意,当然您必须

在Inspector中关闭scrollEnabled!

不要忘记关闭scrollEnabled! :)


还有一些问题

(1)在某些情况下 - 例如,有时当使用灵活的单元格高度表视图在飞行中改变高度时,Apple会做出世界上最令人愤怒的事情: 它们在底部增加额外的空间 。 它必须是iOS中最疯狂,最令人不快的事情之一。 这是一个“快速修复”添加,有时可以帮助这种疯狂。

...
        textContainerInset = UIEdgeInsets.zero
        textContainer.lineFragmentPadding = 0

        // this is not ideal, but you can sometimes use this
        // to fix the "space at bottom" insanity
        var b = bounds
        let h = sizeThatFits(CGSize(
           width: bounds.size.width,
           height: CGFloat.greatestFiniteMagnitude)
       ).height
       b.size.height = h
       bounds = b
 ...

(2)有时候,为了修复另一个微妙的Apple混乱,你必须补充一点:

override func setContentOffset(_ contentOffset: CGPoint, animated: Bool) {
    super.setContentOffset(contentOffset, animated: false)
}

(3)可以说,我们应该补充:

contentInset = UIEdgeInsets.zero

就在.lineFragmentPadding = 0 。 但是...它不适用于当前的iOS! 在未来的操作系统版本中可能有必要添加该代码。

UITextView在所有移动计算中都是最令人惊奇的事情之一,在iOS中完全被破坏的事实。

最后,对于Text Field ,这里有点类似的提示:https://stackoverflow.com/a/43099816/294884


对于iOS 7.0,我发现contentInset技巧不再适用。 这是我用来摆脱iOS 7中的边距/填充的代码。

这将文本的左边缘置于容器的左边缘:

textView.textContainer.lineFragmentPadding = 0

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

textView.textContainerInset = .zero

两条线都需要完全删除边距/填充。


这个解决方法是在2009年IOS 3.0发布时编写的。 它不再适用。

我遇到了同样的问题,最后我不得不结束使用

nameField.contentInset = UIEdgeInsetsMake(-4,-8,0,0);

其中nameField是一个UITextView 。 我碰巧使用的字体是Helvetica 16点。 它是我绘制的特定字段大小的唯一定制解决方案。 这使得左侧的偏移量与左侧齐平,并且顶部偏移量在我们希望盒子被吸引的位置处。

此外,这似乎只适用于您使用默认对齐方式的UITextViews ,即。

nameField.textAlignment = NSTextAlignmentLeft;

例如,右侧对齐, UIEdgeInsetsMake似乎对右侧边缘根本没有影响。

至少,使用.contentInset属性可让您将字段置于“正确”的位置,并适应偏差而不会偏移您的UITextViews

链接地址: http://www.djcxy.com/p/90349.html

上一篇: How to lose margin/padding in UITextView?

下一篇: Why do some C# lambda expressions compile to static methods?