Угловой радиус для просмотра после установки текста

У меня есть UIView, который содержит UILabel. Размер UIView адаптируется к размеру UILabel.

Я хочу, чтобы UIView был кругом, поэтому я установил радиус угла:

view.clipToBounds = true
label.text = "123"
view.layer.cornerRadius = view.frame.size.height / 2

Однако, если я вызову приведенный выше код, радиус угла иногда не адаптируется. Кажется, что кадр UIView еще не изменил свой размер. UIView находится внутри UITableViewCell кстати.


person Manuel    schedule 15.02.2016    source источник
comment
не адаптировано иногда?   -  person tktsubota    schedule 15.02.2016
comment
Да, иногда... довольно странно... хотя он выполняется в основном потоке.   -  person Manuel    schedule 15.02.2016
comment
Я действительно заметил, что меняется не только радиус угла, но и размер представления, содержащего метку.   -  person Manuel    schedule 17.02.2016


Ответы (1)


Если вы не возражаете против создания подклассов, вы можете сделать следующее:

import UIKit

class RoundedView: UIView {

    override func layoutSubviews() {
        super.layoutSubviews()
        layer.cornerRadius = frame.height / 2.0
    }

}

Это будет регулировать радиус угла до соответствующей высоты каждый раз при изменении размера вида.

person Jeremiah    schedule 15.02.2016
comment
Это сработало, но затем размер округленного вида продолжал меняться. Я узнал, что проблема была на самом деле в NSLayoutConstraints в раскадровке. Скругленный вид имел ограничение макета с правой стороны и большее или равное другому UILabel с левой стороны. Ограничение препятствовало изменению размера закругленного представления в соответствии с его подвидом метки. Удаление левого ограничения решило проблему. - person Manuel; 17.02.2016