我UITextView
的身高想限制在某个合理的值,如有必要,文字会被截断。如何确保文本视图的高度与截断的内容的高度匹配?例如,如果将高度设置为固定值,则文本视图底部将有一些可变的空间,这将影响其下方项目的布局。
是否可以通过某种方式设置所需的高度,测量截断的文本,然后使用该尺寸更精确地调整高度?甚至还有一种方法可以测量显示的文本在其中的高度UITextView
?
编辑
我需要澄清一下:
truncated
文本,而我无权访问。textcontainerInset
。这是当前构建屏幕截图的方式:
300
。这将产生截断。300
不是行高的精确倍数,因此最后一条截断的行下方还有一些额外的空间。我想做的是:
将文本视图的大小调整为之后300
,测量截断后的文本的精确高度,以便我可以再次调整文本视图的大小以使其适合而无需额外的间距(例如,将其设置285
为所测量的大小)。
或者,采用其他一些方法可以达到相同的最终结果。
由于您的限制,我希望它会被截断。因此,您需要计算代码中的文本大小并更新约束值:
let boundingRect = (textView.text as NSString).boundingRect(
with: maxSize,
options: .usesLineFragmentOrigin,
attributes: [ .font: textView.font ],
context: nil
)
heightConstraint.constant = boundingRect.height.rounded(.up)
此操作的结果是浮动的,与像素无关。当通过约束条件计算视图大小时,会将其舍入为像素(0.5或0.333 ...),这就是为什么我们需要自行舍入以排除不可预测的情况。要获得像素完美的高度,您可以根据屏幕比例对其进行舍入:
textViewHeightConstraint.constant = (boundingRect.height * UIScreen.main.nativeScale).rounded(.up) / UIScreen.main.nativeScale
另外,正如下面@nghiahoang所述,请不要忘记将插图归零
textView.textContainerInset = .zero
请查看示例项目:https : //github.com/PhilipDukhov/TruncatedTestViewTest
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句