Использование masksToBounds Заставляет мою UILabel исчезать в моей пользовательской ячейке tableView - PullRequest
0 голосов
/ 04 марта 2020

Фон

Здравствуйте, у меня есть tableView с пользовательскими ячейками, как показано на рисунке ниже.

enter image description here

Цель

Моя цель - сделать зеленые квадраты круглыми. Я попытался сделать это с кодом ниже.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

   let cell = tableView.dequeueReusableCell(withIdentifier: "ColorKeyCell", for: indexPath) as! ColorKeyCell


   cell.colorCircleLabel.layer.cornerRadius = (cell.frame.size.width * 0.5)
   cell.colorCircleLabel.layer.masksToBounds = true
   cell.colorCircleLabel.backgroundColor = colorKey[indexPath.row].color
   cell.exampleLabel.attributedText = colorKey[indexPath.row].basicExample
   cell.explanationLabel.text = colorKey[indexPath.row].explanation

   return cell
}

Issue

Если я закомментирую cell.colorCircleLabel.layer.masksToBounds = true, появится зеленое поле, но не круглое. Если я раскомментирую это поле полностью исчезнет. Не только это, но если я использую cell.colorCircleLabel.layer.masksToBounds = true только для одной из ячеек, при заполнении tableView, это также заставляет некоторые другие ячейки исчезать и в зеленых ячейках. Я много смотрел на переполнение стека, но не смог найти решение. Некоторые говорили, что вам нужно позвонить layoutIfNeeded() в viewDidLayoutSubviews. Примеры отличались от моего случая, но я думаю, что я попробовал это правильно, и это не сработало.

Я думал, что, возможно, это связано с настройками горизонтального stackView, или, может быть, с приоритетом объятия или сжатия на метках в stackView, но не совсем уверен. Вот изображение тех, кто на всякий случай.

enter image description here

Зеленая коробка Приоритеты: обнимание 251, сжатие 750

Приоритеты ярлыка: обнимание 250 , Сжатие 750

Приоритеты звуковых кнопок: Обниматься 251, Сжатие 750

Любой совет очень ценится. Спасибо!

Ответы [ 2 ]

3 голосов
/ 04 марта 2020

Попробуйте использовать clipsToBounds = true

cell.colorCircleLabel.layer.cornerRadius = (cell.colorCircleLabel.bounds.size.height  / 2)
cell.clipsToBounds = true

Это должно работать.

1 голос
/ 04 марта 2020

Изменить эту строку:

cell.colorCircleLabel.layer.cornerRadius = (cell.frame.size.width * 0.5)

На:

cell.colorCircleLabel.layer.cornerRadius = cell.colorCircleLabel.frame.width/2

ИЛИ

cell.colorCircleLabel.layer.cornerRadius = cell.colorCircleLabel.frame.height/2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...