我试图定义一个位于屏幕底部稍上方的圆形按钮:
let button = UIButton(type: .custom)
let diameter: Double = 64
button.translatesAutoresizingMaskIntoConstraints = false
button.setTitle("Upvote", for: [])
button.frame = CGRect(x: 100, y: 100, width: diameter, height: diameter)
button.backgroundColor = UIColor(red:0.93, green:0, blue:0.55, alpha:1)
button.layer.cornerRadius = CGFloat(diameter / 2)
view.addConstraints([
createConstraint(button, .centerX, .equal, view, .centerX),
createConstraint(button, .bottom, .equal, view, .bottom, multiplier: 1, constant: -100),
])
button.addTarget(self, action: #selector(handleUpvoteButtonTap), for: .touchUpInside)
view.addSubview(button)
createConstraint
只是NSLayoutConstraint
func createConstraint(_ item: Any, _ attribute: NSLayoutAttribute, _ relation: NSLayoutRelation, _ toItem: Any, _ toAttribute: NSLayoutAttribute, multiplier: Double = 1, constant: Double = 0) -> NSLayoutConstraint {
return NSLayoutConstraint(
item: item,
attribute: attribute,
relatedBy: relation,
toItem: toItem,
attribute: toAttribute,
multiplier: CGFloat(multiplier),
constant: CGFloat(constant)
)
}
我遇到的问题是按钮没有使用宽度/高度diameter
进行渲染(它似乎试图匹配其标题文字的尺寸)。如果我删除了addConstraints
电话,则按钮看起来很正常。
答案 0 :(得分:4)
您只设置了定位约束,因此大小将由按钮的intrinsicContentSize
决定,按钮的标题将根据您的情况确定。button.widthAnchor.constraint(equalToConstant: diameter).isActive = true
button.heightAnchor.constraint(equalToConstant: diameter).isActive = true
。如果您希望它具有特定大小,请设置大小限制。例如:
translatesAutoresizingMaskIntoConstraints = false
一旦设置{{1}},所有基于帧的定位和大小调整都将被忽略。