Swift iOS - 如何设置UIView的高度锚点<=标签的内在文本大小? 'NSLayoutConstraint'不能转换为'Bool'
问题描述:
我有一个编程视图,里面有一个标签,我固定在navBar的底部。标签内部会有动态文本,如果文本的高度变得更小,我希望标签所在的视图至少为64点或更大。Swift iOS - 如何设置UIView的高度锚点<=标签的内在文本大小? 'NSLayoutConstraint'不能转换为'Bool'
此标签中文本的固有尺寸将视图设置在明显的高度。
setViewAndLabel(dynamicText: "Unknown Error\nPlease try your request again\Error: 123")
然而这个文本的内在尺寸使得高度小:
setViewAndLabel(dynamicText: "Message Deleted!")
的留言删除!应该更多的线沿线:
我使用了一些回报键来设置它这样的,但我不认为这是去,因为不同的信息会产生正确的方法:
setViewAndLabel(dynamicText: "\nMessage Deleted!\n")
我也试过:
if myView.heightAnchor.constraint(lessThanOrEqualToConstant: 64){
myView.heightAnchor.constraint(equalToConstant: 64).isActive = true
}
但我得到的错误:
'NSLayoutConstraint' is not convertible to 'Bool'
什么是最好的方式来设置视图的高度标签是在一个最小的高度?
var myLabel: UILabel(){
let label = UILabel()
label.translatesAutoresizingMaskIntoConstraints = false
label.textColor = UIColor.white
label.font = UIFont(name: "Helvetica-Regular", size: 19)
label.numberOfLines = 0
label.sizeToFit()
label.textAlignment = .center
return label
}
let myView:UIView = {
let view = UIView()
view.translatesAutoresizingMaskIntoConstraints = false
return view
}()
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(animated){
setViewAndLabel(dynamicText: //some text will get set here)
}
func setViewAndLabel(dynamicText: String){
view.addSubView(myView)
myView.backgroundColor = UIColor.red
myView.topAnchor.constraint(equalTo: view.topAnchor, constant: 64).isActive = true
View.widthAnchor.constraint(equalTo: view.widthAnchor, constant: 0).isActive = true
myView.addSubView(myLabel)
myLabel.text = dynamicText
myLabel.topAnchor.constraint(equalTo: myView.topAnchor, constant: 0).isActive = true
myLabel.widthAnchor.constraint(equalTo: myView.widthAnchor, constant: 0).isActive = true
myView.bottomAnchor.constraint(equalTo: myLabel.bottomAnchor, constant: 0).isActive = true
//this if statement doesn't work
if myView.heightAnchor.constraint(lessThanOrEqualToConstant: 64){
viewForErrorLabel.heightAnchor.constraint(equalToConstant: 64).isActive = true
}
}
答
这就是你必须设置你的约束:
view.addSubview(myView)
myView.topAnchor.constraint(equalTo: topLayoutGuide.bottomAnchor).isActive = true
myView.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
myView.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
myView.heightAnchor.constraint(greaterThanOrEqualToConstant: 64).isActive = true
myView.addSubview(myLabel)
myLabel.topAnchor.constraint(equalTo: myView.topAnchor).isActive = true
myLabel.leadingAnchor.constraint(equalTo: myView.leadingAnchor).isActive = true
myLabel.trailingAnchor.constraint(equalTo: myView.trailingAnchor).isActive = true
myLabel.bottomAnchor.constraint(equalTo: myView.bottomAnchor).isActive = true
你并不需要在所有的检查标签的高度。你可以简单地创建高度大于或等于的约束,并且其高度永远不会小于64pt(或任何你设置的值) - 即使标签包含非常短的文本。
+0
感谢您的帮助!像魅力一样工作:) –
如果您希望它至少* 64,您为什么使用“小于或等于”约束?如果你总是想要64,或者使用“等于”约束,或者如果你想要至少64,那么使用“大于或等于”。 – Paulw11
@ Paulw11谢谢指出。尽管这不是问题。我忘了添加它对我的问题所说的错误。我正在更新它。 –
@ Paulw11谢谢你的建议。安德烈回答了这个问题,答案正是你所说的那样:) –