Быстрая проблема с высотой рамки кнопки (viewDidLayoutSubviews) - PullRequest
2 голосов
/ 30 сентября 2019

У меня есть несколько квадратных кнопок, к которым я хотел бы добавить закругленные углы, которые пропорциональны высоте кнопки. В прошлых версиях моего приложения я реализовал эту функцию без проблем, используя viewDidLayoutSubviews (). По какой-то причине, после добавления новой версии моего приложения с другими функциями, которые я настроил, этот раздел кода больше не работает, как ожидалось. Вот код:

override func viewDidLayoutSubviews() {

for button in buttons {

button!.layer.shadowColor = UIColor.black.cgColor

button!.layer.shadowOffset = CGSize(width: 0, height: 1.0)

button!.layer.shadowOpacity = 0.4

button!.layer.shadowRadius = button!.frame.height / 40

button!.layer.cornerRadius = button!.frame.height / 10

}

Опять же, этот блок кода работал нормально, но по какой-то причине он больше не работает. Я испытываю гораздо больший относительный радиус на меньших кнопках (iPhone SE) по сравнению с большими кнопками (iPad).

Для устранения неполадок в viewDidLayoutSubviews () я печатаю кнопку! .Frame.height иЯ заметил, что независимо от того, какое устройство я использую, высота кадра составляет 395,5, что, как я считаю, является правильным размером только на 12,9-дюймовом iPad. Поэтому кнопки на 12,9-дюймовом iPad выглядят правильно, но радиусы в итоге оказываются слишком большимина всех меньших устройствах.

Есть идеи, что здесь происходит? Почему все они возвращают одинаковую высоту кадра, даже если они визуально очень разных размеров на разных устройствах?

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019
Try like this:-

    override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    for button in buttons {

    button!.layer.shadowColor = UIColor.black.cgColor

    button!.layer.shadowOffset = CGSize(width: 0, height: 1.0)

    button!.layer.shadowOpacity = 0.4

    button!.layer.shadowRadius = button!.frame.height / 40

    button!.layer.cornerRadius = button!.frame.height / 10

    }
0 голосов
/ 30 сентября 2019

Я скопировал и вставил приведенный выше код в метод viewWillAppear (), и проблема была решена. Затем я удалил код из viewWillAppear (), оставив мне исходный код во время публикации вопроса, и он продолжает работать, как и ожидалось (работает). Что может быть причиной этого прерывистого поведения

Причина, когда вы инициализировали кнопки в viewWillAppear и удалили их, но это все еще работает, потому что рамка вашей кнопки не изменилась в методе viewDidLayoutSubviewviewDidLayoutSubview вызывается, только представление контроллера обновляется, поворачивается или изменяется, что в вашем случае не происходит.

Если вы попытаетесь повернуть ваше устройство, вы увидите, что рамка родительского представления изменилась.

Для получения дополнительной информации об иерархии представления. Смотрите эту статью

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