如何在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 ...
在几乎所有情况下, 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
。
上一篇: How to lose margin/padding in UITextView?
下一篇: Why do some C# lambda expressions compile to static methods?