границы UIView изменяются после viewDidLoad - PullRequest
0 голосов
/ 05 марта 2020

У меня есть представление с несколькими подпредставлениями. Все подпредставления имеют ограничения по размеру, встроенные в раскадровку.

часть viewDidLoad () предназначена для программного добавления ряда кнопок. И я использую границы подпредставления, чтобы знать, где добавить кнопки, чтобы занять доступную экранную недвижимость. В качестве упрощенного примера:

override func viewDidLoad()
{
    super.viewDidLoad()

    let bottom = buttonView.bounds.maxY
    let right = buttonView.bounds.maxX

    let button = UIButton()
    button.frame = CGRect(x: CGFloat(0.0),
                          y: CGFloat(0.0),
                          width: CGFloat(right),
                          height: CGFloat(bottom))
    button.addTarget(self, action: #selector(buttonPushed(_:)), for: .touchUpInside)
    buttonView.addSubview(button)

    print("buttonview frame = \(buttonView.frame)")
}

override func viewWillAppear()
{
    super.viewWillAppear()

    print("buttonview frame = \(buttonView.frame)")
}

То, что я вижу в симуляторе (и на оборудовании), состоит в том, что все представления имеют размеры в соответствии с тем, как я их спроектировал в раскадровке, в соответствии с оборудованием, которое я спроектировал это на (iPhone 11). Когда я запускаю его на iPhone 8, все мои подпредставления запускаются за пределами экрана, и первая инструкция print указывает ширину 414.0. Ограничения применяются где-то до viewWillAppear, а второй оператор печати указывает ширину 375,0. Но моя кнопка не изменена, чтобы соответствовать. Это все еще продолжается за пределами экрана.

Как программно добавить мои подпредставления кнопок (в этом примере только 1, код имеет 20, встроенный в al oop), чтобы придерживаться ограничений границ суперпредставления, после того, как Я знаю, что они на самом деле?

1 Ответ

0 голосов
/ 05 марта 2020

вы должны добавить ограничение по коду, например.

1) сначала я создам кнопку.

    lazy var closeButton : UIButton = {
        let button = UIButton(type: .custom)
        button.translatesAutoresizingMaskIntoConstraints = false
        button.backgroundColor = .blue
        button.addTarget(self, action: #selector(buttonAction), for: .touchUpInside)
        return button
    }()

2) с этим кодом я добавлю кнопку к основной вид и установите ограничение.

self.view.addSubview(closeButton)
NSLayoutConstraint.activate([
            closeButton.heightAnchor.constraint(equalToConstant: 20),
            closeButton.widthAnchor.constraint(equalToConstant: 20),
            closeButton.trailingAnchor.constraint(equalTo: self.view.trailingAnchor, constant: -20),
            closeButton.centerYAnchor.constraint(equalTo: self.view.centerYAnchor)]

, но если вы действительно хотите понять, как это работает, перейдите по ссылке Как программно добавить ограничения с помощью Swift

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...