I am having a little issue with the frame of a button. The screenshot below shows the situation. There are two buttons, one with a short title (the 1st) and one with a long title extending on 2 lines (the 2nd).
For each button I set up a view (with a shaded color). It is meant to mach the size of the button but as one can see it does not work.
Here is the code I use to create the view and try to match the frame of the view to that of its associated button. Can anyone see why it is not working. It seems like the button frame is careless of the title inside. Is that the way it is supposed to be?
for button in [firstButn,secondButn] {
button.setTitleColor(UIColor.darkGray, for: .normal)
let bgView = UIView()
bgView.backgroundColor = UIColor.black.withAlphaComponent(0.17)
bgView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(bgView)
view.addConstraints([
NSLayoutConstraint(item: bgView, attribute: .leading, relatedBy: .equal,
toItem: button, attribute: .leading,
multiplier: 1.0, constant: 0.0),
NSLayoutConstraint(item: bgView, attribute: .trailing, relatedBy: .equal,
toItem: button, attribute: .trailing,
multiplier: 1.0, constant: 0.0),
NSLayoutConstraint(item: bgView, attribute: .top, relatedBy: .equal,
toItem: button, attribute: .top,
multiplier: 1.0, constant: 0.0),
NSLayoutConstraint(item: bgView, attribute: .bottom, relatedBy: .equal,
toItem: button, attribute: .bottom,
multiplier: 1.0, constant: 0.0)])
}
Here are the constraints on the buttons:
for button in [firstButn,secondButn] {
view.addConstraints([
NSLayoutConstraint(item: button, attribute: .centerX, relatedBy: .equal,
toItem: view, attribute: .centerX, multiplier: 1.0, constant: 0.0),
NSLayoutConstraint(item: button, attribute: .width, relatedBy: .equal,
toItem: view, attribute: .width, multiplier: 0.6, constant: 0.0)])
}
view.addConstraints([
NSLayoutConstraint(item: firstButn, attribute: .centerY, relatedBy: .equal,
toItem: view, attribute: .centerY, multiplier: 2.0/5.0, constant: 0.0),
NSLayoutConstraint(item: secondButn, attribute: .centerY, relatedBy: .equal,
toItem: view, attribute: .centerY, multiplier: 4.0/5.0, constant: 0.0)])
As on can see, nothing is imposed on the height.