#ios #swift #uibutton #tvos
#iOS #быстрый #uibutton #твос
Вопрос:
У меня есть эта панель вкладок, созданная программно:
func createTabBar() {
var arrangedSubviews = [UIView]()
if let menus = CMSessionManager.sharedInstance.menus {
for menu_item in menus {
if let menuInfoDetails = menu_item as? [String: Any] {
let tabButton = CustomButton(color: .red, titleString: menuInfoDetails["label"] as! String)
// This apparently has no effect on button size
tabButton.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
arrangedSubviews.append(tabButton)
}
}
stackView.alignment = .leading
stackView = UIStackView(arrangedSubviews: arrangedSubviews)
stackView.translatesAutoresizingMaskIntoConstraints = false
stackView.distribution = .fillProportionally
stackView.axis = .horizontal
stackView.spacing = 8
self.view.addSubview(stackView)
stackView.topAnchor.constraint(equalTo: self.view.topAnchor, constant: 24).isActive = true
stackView.leftAnchor.constraint(equalTo: self.view.leftAnchor, constant: 0).isActive = true
stackView.rightAnchor.constraint(equalTo: self.view.rightAnchor, constant: 0).isActive = true
}
}
Я пытался программно изменить размеры кнопок:
tabButton.frame = CGRect(x: 100, y: 100, width: 100, height: 50)
Независимо от того, какую высоту, ширину или положение x y я установил, ничего не изменится.
Есть какие-нибудь идеи, что не так?
Ответ №1:
Вместо того, чтобы устанавливать фрейм напрямую, используйте автозапуск (ограничения):
NSLayoutConstraint.activate([
tabButton.heightAnchor.constraint(equalToConstant: 100),
tabButton.widthAnchor.constraint(equalToConstant: 100)
])
Кроме того, поскольку вы используете представление стека, настройки x
и y
значения не будут иметь никакого эффекта, поскольку его единственное задание stack views заключается в размещении этих представлений в соответствующих местах. Поскольку вы используете spacing
в своем представлении стека, нет смысла устанавливать ограничение ширины, поэтому вы должны хорошо настроить это значение и использовать только ограничение высоты.
NSLayoutConstraint.activate([
tabButton.heightAnchor.constraint(equalToConstant: 100)
])