我正在尝试根据内容更新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中编写。
答案 0 :(得分:0)
请按照以下步骤
我希望它能奏效。
答案 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