在 iOS 中,带有属性文本的 textview 的高度有时是错误的

Posted

技术标签:

【中文标题】在 iOS 中,带有属性文本的 textview 的高度有时是错误的【英文标题】:The height of textview with attributed text is wrong sometimes in iOS 【发布时间】:2015-01-10 05:30:51 【问题描述】:

我正在使用以下代码强制我的 textview 的高度约束

func setHeightConstraint(textView: UITextView) 
    textView.sizeToFit()
    textView.layoutIfNeeded()

    var newFrame:CGRect=textView.frame
    newFrame.size.height=textView.contentSize.height
    textView.frame=newFrame
    println(textView.contentSize.height)
    textViewHeightConstraints.constant=textView.contentSize.height

我的文本视图包含带有链接、粗体、斜体等的属性文本..

有时效果很好,但有时效果不佳。

我通过打印 textView.contentSize.height 发现 textView.contentSize.height 有时比它应该的要小很多。

我在正常文本中使用了该代码 sn-p 没有问题,所以我猜这是有关属性文本的问题。

我尝试了谷歌搜索并尝试了这个和那个代码,但没有成功。

当textView包含AttributeText时,我应该如何测量它的正确高度??

任何帮助将不胜感激。

提前致谢!

(虽然我更喜欢 swift,但我也可以阅读 Object-C 代码,因此也感谢 Object-C 的答案!!)

【问题讨论】:

【参考方案1】:

听起来您正在尝试制作一个可以调整高度以适合其内容的文本视图。我就是这样做的:

func adjustHeight() 
    let sz = self.tv.sizeThatFits(CGSizeMake(self.tv.bounds.width, 10000))
    self.heightConstraint.constant = ceil(sz.height)

在该代码中,self.tv 是文本视图,self.heightConstraint 是设置其高度的内部约束。

顺便说一句,您的代码存在重大问题。特别是:如果您使用约束,则不得使用frame!约束对象的位置和大小;这就是他们的目的。

【讨论】:

谢谢!我决定使用框架,而不是约束。你的身高测量代码就像魅力一样!

以上是关于在 iOS 中,带有属性文本的 textview 的高度有时是错误的的主要内容,如果未能解决你的问题,请参考以下文章

iOS中TextView显示HTML文本

以编程方式在TextView中设置文本对齐方式

以编程方式在 TextView 中设置文本对齐方式

Android TextView中文字通过SpannableString来设置超链接 颜色 字体等属性

为 iOS 应用返回带有丰富标记的文本

iOS隐私安全:用户协议及隐私政策弹框(包含超链接属性demo支持中英文切换)