UIButton не округляется правильно, несмотря на то, что радиус угла равен половине высоты - PullRequest
2 голосов
/ 03 августа 2020

Я работаю над экраном, который по сути позволяет пользователю вводить некоторую информацию для своего профиля. На этом экране есть кнопка, с помощью которой пользователи могут выбрать свой пол. Я хочу, чтобы эти кнопки были закругленными, поэтому, чтобы достичь sh этого, я делаю радиус угла этих кнопок равным половине их высоты. Чтобы попасть на этот экран, есть два способа: один - если вы создаете свой профиль, а второй - если вы редактируете свой профиль. Проблема в том, что когда вы создаете профиль, UIButton сжимается и не округляется правильно, но когда я редактирую свой профиль, он округляется правильно, даже если это тот же самый код, единственная разница в том, что когда вы находитесь в экран для редактирования вашего профиля, я включаю панель навигации.

Код, который я использую для округления кнопки, находится здесь:

        maleButton.layer.borderColor = maleButtonColor.cgColor
        maleButton.setTitleColor(maleButtonColor, for: .normal)
        maleButton.layer.cornerRadius = maleButton.frame.size.height / 2

, и это происходит в функции, которая вызывается в: viewDidLayoutSubviews()

Различия в этих кнопках показаны ниже: Примечание ** Это те же самые кнопки, разница только в том, что на втором изображении цвет фона был изменен, чтобы показать, что пользователь выбрал эту кнопку , поскольку они редактируют свой профиль.

enter image description here

enter image description here

I printed out the heights, widths, and cornerradius that the buttons:

When it isn't working here are the values: enter image description here

And when it is working here are the values: введите описание изображения здесь

Как вы можете видеть, в обоих случаях радиус угла составляет ровно половину высоты, поэтому округление должно быть правильным, но это не так. И это странно, потому что это один и тот же код и один и тот же контроллер представления в разных ситуациях, когда он работает и не работает. Эта проблема ставила меня в тупик, поэтому я надеялся, что кто-то сможет пролить на нее свет. Спасибо!

1 Ответ

1 голос
/ 03 августа 2020

@ Wana_B3_Nerd Основная причина по этой причине - ваш пропорциональный рост. viewDidLoad и viewWillAppear всегда задают высоту, установленную в раскадровке. В viewDidAppear: вы всегда будете получать обновленный фрейм. вы можете решить эту проблему разными способами. Я предлагаю способы, которые я знал.

  1. Выполните код в viewDidAppear: методе

  2. Если viewDidAppear: неприменимо, и вы sh, чтобы ввести код в viewDidLoad, затем добавить код в основную очередь отправки

     DispatchQueue.main.async {
         // your code
     }
    
  3. Подкласс UIButton и добавить свой код в метод drawRect.

     class RoundButton: UIButton {
    
         override func draw(_ rect: CGRect) {
              // Your code
          }   
    
     }
    
...