изменение значения множителя ограничения

63
7

У меня есть панель меню, которая находится в верхней части CollectionViewController с несколькими заголовками размером около 30 пикселей. У каждого заголовка есть небольшой бар внизу, указывающий, какая страница/элемент пользователь включен, аналогично приложению Youtube.

class MenuBar : UIView {

var menuSectionTitles = ["Title1","Title2", "Title3","Title4"]

var numberOfSectionsInHorizontalBar : CGFloat?

var horizontalBarLeftAnchorConstraint: NSLayoutConstraint?
var horizontalBarWidthAnchorConstraint: NSLayoutConstraint?

override init(frame: CGRect) {
super.init(frame: frame)
setupHorizontalBar()
}

required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}

func setupHorizontalBar() {
let horizontalBarView = UIView()
horizontalBarView.backgroundColor = UIColor.rgb(10, green: 150, blue: 255)
horizontalBarView.translatesAutoresizingMaskIntoConstraints = false
addSubview(horizontalBarView)

horizontalBarLeftAnchorConstraint = horizontalBarView.leftAnchor.constraint(equalTo: self.leftAnchor)
horizontalBarLeftAnchorConstraint?.isActive = true

horizontalBarView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true

// Set the multiplier/width of the horizontal bar to indicate which page the user is on
horizontalBarWidthAnchorConstraint = horizontalBarView.widthAnchor.constraint(equalTo: widthAnchor, multiplier: 1 / 4)
horizontalBarWidthAnchorConstraint?.isActive = true

horizontalBarView.heightAnchor.constraint(equalToConstant: 3).isActive = true
}
}

Значение множителя для horizontalBarWidthAnchorConstraint жестко закодировано при значении 1/4

Я хочу повторно использовать представление несколько раз для разных контроллеров представлений, поэтому попытался изменить множитель horizontalBarWidthAnchorConstraint следующим образом:

class ViewController: UICollectionViewController {

lazy var menuBar : MenuBar = {
let mb = OptionsBar()
mb.menuOptions = ["Title1", "Title2", "Title3"]
mb.translatesAutoresizingMaskIntoConstraints = false
mb.horizontalBarWidthAnchorConstraint?.constant = 1/3
return mb
}()
}

Но этот метод не работает. Я не могу найти способ изменить значение множителя внутри ViewController.

спросил(а) 2021-01-25T17:37:07+03:00 4 месяца, 4 недели назад
1
Решение
63

В коде здесь вы меняете constant ограничения, а не multiplier. Это верно?

Также обратите внимание, что multiplier ограничения доступен только для чтения. Вы не можете его изменить. Если вы хотите изменить multiplier ограничения, применяемого к представлению, единственное, что нужно сделать, это добавить новое ограничение с новым множителем и удалить старое ограничение.

Единственной частью ограничения, которое является чтение/запись, является свойство constant.

ответил(а) 2021-01-25T17:37:07+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема