我有一个UIStackView
,它包含三个或四个定制的UIButton
。所有按钮都是完全圆形的,左右按钮比中心的一/二略大。不知何故,我不能让UIStackView
遵守DeckPageButton
设置的边界。
下面是我的VC中呈现按钮的函数:
private func setupButtons() {
guard let deck = self.deck else {
log.error("Failed to load deck")
return
}
let nFloat = CGFloat(deck.type.buttons.count)
let rad = (deckButtonsStackView.bounds.size.width - (8.0 * (nFloat - 1.0))) / nFloat
for type in deck.type.buttons {
let button = DeckPageButton()
button.setupView(type: type, size: CGSize(width: rad, height: rad))
button.translatesAutoresizingMaskIntoConstraints = false
deckButtonsStackView.addArrangedSubview(button)
}
}
下面是setupView
函数:
func setupView(type: DeckPageButtonType, size: CGSize) {
bounds.size = size.resized(multiplier: type.radiusCoefficient)
layer.cornerRadius = size.height / 2
layer.borderWidth = 5
layer.borderColor = type.borderColor
}
我为deckButtonsStackView
尝试了不同的对齐和分布选项,但它们都不符合
1.按钮的纵横比-它们不是正方形,因此也不是圆形
1.边缘大小-所有按钮都是相同的大小,即使内部的按钮将其bounds
设置为较小的比例
下面是我使用FillEqually
得到的最佳结果(三个和四个按钮选项的代码相同):
我也试过设置按钮的frame
而不是bounds
,并保持其他一切相同,这是结果:
UIStackView
对于我的目标来说只是一个糟糕的选择吗?如果是这样,什么是更好的方法?
2条答案
按热度按时间2uluyalo1#
您应该使用约束来设置每个按钮的大小:
在
setUpView
中,而不是bounds.size = ...
之后,将间距设置为一些合理的值,对齐为“中心”,分布为“等中心”应该会给予你一个想要的结果。
aoyhnmkz2#
不要为按钮设置'translatesAutoresizingMaskIntoConstraints = false',或者更好地使用约束而不是框架调整大小