У меня есть несколько представлений, размер которых не жестко запрограммирован, а определяется с помощью ограничений, и мне нужно, чтобы эти представления были круглыми.
Есть ли способ установить свойство angleRadius «динамически», например. в зависимости от фактического размера объекта?
Я знаю, что если это представление находится внутри UIViewController, я могу получить ширину через roundView.frame.width
и установить там свойство layer.cornerRadius, но круглые представления не содержатся в viewController , но управляется другим простым UIView.
Заранее спасибо!
Дэйв
Автоматически установите угловой радиус UIView на половину ширины представления.
Ответы (3)
Вы можете переопределить метод layoutSubviews класса View и установить там значение angleRadius. Допустим, вы хотите, чтобы угол угла составлял половину ширины представления:
override func layoutSubviews() {
super.layoutSubviews()
self.layer.cornerRadius = self.bounds.width * 0.5
}
super.layoutSubviews()
imo.
- person Travis Griggs; 23.01.2019
Этого легко добиться с помощью RxSwift, соблюдая Key Path.
extension UIView{
func cornerHalf(){
clipsToBounds = true
rx.observe(CGRect.self, #keyPath(UIView.bounds))
.subscribe(onNext: { _ in
self.layer.cornerRadius = self.bounds.width * 0.5
}).disposed(by: rx.disposeBag)
}
}
Просто вызовите метод init
, код кажется проще с помощью объявления, вместо того, чтобы распределяться по двум местам. В частности, логика обычно присутствует в вашем проекте.
Звоните так:
let update: UIButton = {
let btn = UIButton()
// more config
btn.cornerHalf()
return btn
}()
Просто получите к ним доступ через простое представление, которое их содержит. Если в вашем простом представлении-контейнере нет этого круглого представления в качестве экземпляров, вы можете получить к ним доступ, перебирая его массив подпредставлений. Когда вы получите доступ к представлению, вы можете получить доступ к их frame.size.width и установить для свойства layer.corner radius это значение.