SWIFT - cornerRadius не работает в пользовательском CollectionViewCell - PullRequest
0 голосов
/ 18 апреля 2020

Я пытаюсь получить округлую ячейку UICollection, но я обнаружил, что она как-то не работает, и я не могу понять, почему. У меня есть TableView в обычном ViewController, в этом табличном представлении у меня есть настраиваемая ячейка таблицы (в указанном разделе), и в этой настраиваемой ячейке таблицы есть также CollectionView с настраиваемой collectionCell, и если я делаю что-либо округленное там, оно просто не округляется что-нибудь. Я обрезал testBtn в границах, но это не сработало ... Я также попробовал testBtn.layer.masksToBounds безуспешно. Однако, если я делаю округление в родительском (сама ячейка tableView), оно работает просто хорошо ...

Код CollectionViewCell:

import UIKit

class ProfileTileCollectionViewCell: UICollectionViewCell {

    @IBOutlet var testBtn: UIButton!
    @IBOutlet var contView: UIView!

    override func awakeFromNib() {
        super.awakeFromNib()
        testBtn.layer.cornerRadius = 20
        testBtn.clipsToBounds = true
        // Initialization code
    }

    @IBAction func testClicked(_ sender: Any) {
        print("clicked")
    }
}

Снимок экрана mainView: Screenshot.png

Синий цвет - это фон collectionView, серый - фон ячейки, а фиолетовый - кнопка. Я не знаю, опаздывает ли, но это странно для меня, я не могу работать над этим ... Я что-то упускаю ... Любую помощь я буду признателен!

Ответы [ 3 ]

0 голосов
/ 18 апреля 2020

Я думаю, что из скриншота вы добавили угловой радиус в представление своей коллекции и установили для clipsToBounds значение true. Если вам не нужен округленный вид коллекции, удалите cornerRadius и установите для clipsToBounds значение false. Или, если вам нужно, чтобы они оба были округлены, сохраняйте отступ между видом коллекции и кнопкой. Это можно сделать, настроив свойство inset раздела.

0 голосов
/ 18 апреля 2020

У меня было 8 часов сна, потому что, как и комментарий Роба, я попытался немного покопаться в отладке и заметил предупреждение, в котором говорилось, что поведение UICollectionViewFlowLayout не задано ... (и так на). Поэтому я решил настроить UICollectionViewDelegateFlowLayout так:

extension ProfileTilesTableViewCell: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
    return UIEdgeInsets(top:0, left:10, bottom:0, right: 10)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    return CGSize(width: (collectionView.frame.width - 40) / 3 , height: collectionView.frame.height - 5)
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 10
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 10
}

И наконец: D как-то все заработало!

Поэтому я удалил все, что использовал для тестирования, удалил testBtn и изменил testBtn .tainedCorners к contView.oundedCorners, установите обратно свойства collectionView, и оно выглядит примерно так, как я ищу: Screenshot2.png

Спасибо за ваши ответы, особенно на вопрос Роба. Это то, что я искал!

С уважением, СБ!

0 голосов
/ 18 апреля 2020

Попробуйте установить testBtn.layer.masksToBounds = true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...