以编程方式更新UITextView高度

时间:2017-09-21 11:12:55

标签: swift uitextview

我正在尝试根据内容更新UITextView的高度。我看过this solution但是无法使用我当前的代码(仍在学习swift)

我将UITextView定义为:

    let eventDetailInfoTextBox : UITextView = {
    let textbox = UITextView()
    textbox.backgroundColor = UIColor.clear
    textbox.layer.borderWidth = 1
    textbox.layer.borderColor = ColorPallet.AppTertiaryColor.cgColor
    textbox.layer.cornerRadius = 10
    textbox.setNeedsDisplay()
    let contentSize = textbox.sizeThatFits(textbox.bounds.size)
    textbox.isEditable = false
    return textbox
}()

然后在setupViews()中添加子视图,并使用对setupEventDetailInfoTextBox()的调用在视图中定义其位置

    fileprivate func setupEventDetailInfoTextbox() {

    print("Event Detail Info Text Box Height: \(eventDetailInfoTextBox.contentSize.height)")

    var frame = eventDetailInfoTextBox.frame
    frame.size.height = eventDetailInfoTextBox.contentSize.height
    eventDetailInfoTextBox.anchor(eventDetailMapView.bottomAnchor, left: self.leftAnchor, bottom: nil, right: self.rightAnchor, topConstant: 8, leftConstant: 10, bottomConstant: 0, rightConstant: 10, widthConstant: 0, heightConstant: frame.size.height)

}

对.anchor的调用基于通过此link找到的Lets Build That App框架,并基本上从Xcode中包装了本地函数。我知道这很有效,并且在我的应用程序中重复使用了相同的功能。

print语句的输出为-8,由适合显示1行文本的高度(有时)表示。

如果我的文字超过1行,有人能看出为什么我的文字框拒绝变大吗?

我正在使用IOS 10,Xcode 8并在swift 3中编写。

2 个答案:

答案 0 :(得分:0)

请按照以下步骤

  • 创建TextView的高度约束出口。
  • 计算Textview的内容高度。
  • 更新TextView高度约束常量值。
  • 调用layoutIfNeeded()函数。

我希望它能奏效。

答案 1 :(得分:0)

如果您想要静态,向下和脏的东西,只要按正确的顺序放置所有内容,就可以简化流程(不设置和重置属性)。如果你需要处理设备轮换或其他运行时更改,那将需要稍微减少和肮脏的东西,但不是很多 - 我不确定你需要什么,所以我选择了更简单。

// instance property so that other constraints can refer to it
let descriptionTextView = UITextView()

// configure text view
descriptionTextView.text = descriptionModel
descriptionTextView.font = // UIFont
descriptionTextView.textColor = // UIColor
descriptionTextView.isEditable = false
descriptionTextView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(descriptionTextView)

// set constraints
descriptionTextView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 16).isActive = true
descriptionTextView.topAnchor.constraint(equalTo: divider.bottomAnchor, constant: 32).isActive = true
descriptionTextView.widthAnchor.constraint(equalTo: view.widthAnchor, constant: -32).isActive = true
descriptionTextView.sizeToFit()
descriptionTextView.layoutIfNeeded()
descriptionTextView.heightAnchor.constraint(equalToConstant: descriptionTextView.contentSize.height).isActive = true