WedX - журнал о программировании и компьютерных науках

Скругленные углы в пользовательском UICollectionViewCell не работают в Swift

У меня есть собственный 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. Тот же результат.

Вот результат. Это не круг, это неправильный угол СМОТРЕТЬ ЭТОТ РЕЗУЛЬТАТ

23.12.2020

  • Чтобы применить закругленные углы к любому виду, вам просто нужно указать angleRadius и сделать clipsToBounds = true. Вот и все. 23.12.2020
  • @DharaPatel i.stack.imgur.com/3cb2x.png см. этот результат. Я сделал angleRadius и clipsToBounds. Мой код здесь. В чем проблема, почему у меня есть этот результат? 23.12.2020
  • Пожалуйста, убедитесь, что ваша кнопка имеет одинаковую высоту и ширину, если вы хотите сделать круглую кнопку. 23.12.2020
  • Да, соотношение 1:1. 23.12.2020

Ответы:


1

Я предполагаю, что вы используете IBOutlet. Создайте класс что-то вроде этого, добавьте кнопку в свою ячейку в раскадровке, отредактируйте там, как хотите, это проще. Ваш код не очень хорош, просто удалите размер, 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
}

}

23.12.2020
  • Спасибо, что поделились, но вся идея заключалась в том, что я хотел круглую кнопку, поэтому я должен использовать ширину / 2, и это нельзя сделать с помощью каких-то постоянных пикселей. Но я создал класс RoundButton, и он не работает. 24.12.2020

  • 2

    Проблема заключалась в том, что я скруглял углы в awakeFromNib(), вместо этого вы ДОЛЖНЫ делать это в layoutSubviews(), и это прекрасно работает.

    24.12.2020
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

    Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
    Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]