Установка радиуса угла через viewDidAppear () или viewWillLayoutSubviews ()? - PullRequest
0 голосов
/ 29 декабря 2018

Таким образом, установка угловых радиусов для округления левого и правого краев для моих UIButton-ов в моем приложении работает путем захвата границ кнопок и деления высоты на два в viewWillLayoutSubviews ().Однако, если я перехожу на другой экран с помощью UIBarButtonItem (), поворачиваю устройство, а затем возвращаюсь обратно на экран с помощью кнопок UIBarton (), они НЕ округляются.Радиусы углов по-прежнему основаны на размерах кнопок от предыдущей ориентации.Я попытался использовать viewDidAppear, но есть вторая / заметная задержка в установке радиусов угла.

Есть ли способ ускорить процесс viewDidAppear?Я не думаю, что viewWillAppear будет работать, потому что контроллер представления не знает о стандартных (квадратных) размерах uibutton (s), которые я изменяю.

Приложение, над которым я работаю, таково:

Скриншоты моего текущего приложения с экрана загрузки до точки углового радиуса, которые не обновляются корректно

1 Ответ

0 голосов
/ 29 декабря 2018

Вместо этого используйте viewDidLayoutSubviews, потому что у вас будут обновленные границы в этой точке, но еще не в viewWillLayoutSubviews.

Или я мог бы предложить иметь подкласс кнопок, который выполняет округление в пределах своего собственного layoutSubviews, освобождая ваш контроллер представления от необходимости перебирать кнопки и округлять их.

Например:

@IBDesignable
class RoundedButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()

        let radius = min(bounds.width, bounds.height) / 2
        layer.cornerRadius = radius
    }

}

А затем просто используйте этот класс вместо UIButton.Это дает:

enter image description here

...