#ios #swift #cornerradius
#iOS #swift #cornerradius
Вопрос:
У меня есть пользовательская UICollectionViewCell и я пытаюсь закруглить углы для кнопки, которая не работает. У меня была такая же проблема для ViewController, и проблема заключалась в том, что я выполнял округление в viewDidLoad вместо subviewsDidLoad.
Я понятия не имел, в чем проблема сейчас.
делюсь своим кодом.
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
initialsButton.layer.cornerRadius = 0.5 * initialsButton.frame.size.width
initialsButton.clipsToBounds = true
initialsButton.layer.masksToBounds = true
}
-> но я также пробовал без .clipsToBounds и .masksToBounds. Тот же результат.
Вот результат. Это не круг, это заставляет corner ошибочно
ВИДЕТЬ ЭТОТ РЕЗУЛЬТАТ
Комментарии:
1. Для применения закругленных углов к любому виду вам просто нужно указать cornerRadius и сделать clipsToBounds = true . Вот и все.
2. @DharaPatel i.stack.imgur.com/3cb2x.png посмотрите на этот результат. Я сделал cornerRadius и clipsToBounds. Мой код здесь. В чем проблема, почему у меня есть результат?
3. Пожалуйста, убедитесь, что ваша кнопка имеет одинаковую высоту и ширину, если вы хотите сделать круглую кнопку.
4. Да, его соотношение равно 1: 1
Ответ №1:
Проблема заключалась в том, что я делал закругление углов в awakeFromNib(), вместо этого вы ДОЛЖНЫ сделать это в layoutSubviews(), и это работает хорошо.
Ответ №2:
Я полагаю, вы используете IBOutlet для создания класса примерно так, добавьте кнопку в свою ячейку в раскадровке, отредактируйте там, как хотите, это проще. Ваш код не очень хорош, просто удалите size, frame.height / 2 — это то, что вам нужно, если вы идете этим путем.
@IBDesignable
class RoundedBtn: UIButton {
@IBInspectable var cornerRadius: Double {
get {
return Double(self.layer.cornerRadius)
}set {
self.layer.cornerRadius = CGFloat(newValue)
}
}
@IBInspectable var borderWidth: Double {
get {
return Double(self.layer.borderWidth)
}
set {
self.layer.borderWidth = CGFloat(newValue)
}
}
@IBInspectable var borderColor: UIColor? {
get {
return UIColor(cgColor: self.layer.borderColor!)
}
set {
self.layer.borderColor = newValue?.cgColor
}
}
@IBInspectable var shadowColor: UIColor? {
get {
return UIColor(cgColor: self.layer.shadowColor!)
}
set {
self.layer.shadowColor = newValue?.cgColor
}
}
@IBInspectable var shadowOffSet: CGSize {
get {
return self.layer.shadowOffset
}
set {
self.layer.shadowOffset = newValue
}
}
@IBInspectable var shadowRadius: Double {
get {
return Double(self.layer.shadowRadius)
}set {
self.layer.shadowRadius = CGFloat(newValue)
}
}
@IBInspectable var shadowOpacity: Float {
get {
return self.layer.shadowOpacity
}
set {
self.layer.shadowOpacity = newValue
}
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
commonInit()
}
override init(frame: CGRect) {
super.init(frame: frame)
commonInit()
}
func commonInit() {
self.titleLabel?.numberOfLines = 0
self.titleLabel?.textAlignment = .center
self.setContentHuggingPriority(UILayoutPriority.defaultLow 1, for: .vertical)
self.setContentHuggingPriority(UILayoutPriority.defaultLow 1, for: .horizontal)
}
override var intrinsicContentSize: CGSize {
let size = self.titleLabel!.intrinsicContentSize
return CGSize(width: size.width contentEdgeInsets.left contentEdgeInsets.right, height: size.height contentEdgeInsets.top contentEdgeInsets.bottom)
}
override func layoutSubviews() {
super.layoutSubviews()
titleLabel?.preferredMaxLayoutWidth = self.titleLabel!.frame.size.width
}
}
Комментарии:
1. Спасибо, что поделились, но вся идея заключалась в том, что я хотел круглую кнопку, поэтому я должен использовать width / 2, и это невозможно сделать с помощью некоторых постоянных pxs. Но я создал класс RoundButton, и он не работает.