Круглое изображение квадратное на первом обновлении таблицы - PullRequest
0 голосов
/ 29 июня 2018

У меня есть панель поиска, подключенная к моему UITableView.

Вот мой код:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = SongPicker.dequeueReusableCell(withIdentifier: "cell")!

    // Image
    cell.imageView?.image = songHandler.songItems[indexPath.row].songImage?.cropToBounds()
    cell.imageView?.layer.cornerRadius = cell.imageView!.frame.width / 2
    cell.imageView?.layer.masksToBounds = true
    cell.imageView?.layer.borderWidth = 3
    cell.imageView?.layer.borderColor = UIColor.lightGray.cgColor

    // Song name
    cell.textLabel?.text = songHandler.songItems[indexPath.row].songName

    // Artist name
    cell.detailTextLabel?.text = songHandler.songItems[indexPath.row].songArtist

    return cell
}

(SongPicker мой стол)

Распечатав результат cell.imageView?.layer, я вижу, что при первой загрузке изображений у них не установлено свойство cornerRadius в экземпляре. После правильной перезагрузки свойство устанавливается.

Однако, когда ячейки выходят из поля зрения или обновляются посредством получения новой информации (.reloadData() ничего не делает), изображения в ячейках имеют круглую форму.

Есть еще один вопрос по этому поводу, но все повторяют, что вам нужно установить свойство cornerRadius и masksToBounds. Это никоим образом не поможет решить мою проблему, поскольку эти свойства четко установлены.

Я попытался создать расширение для UITableViewCell с помощью кода слоя изображения, но оно дает точно такие же результаты.

Почему мои изображения начинаются с квадрата и как я могу это легко исправить?

enter image description here

Если у вас есть какие-либо вопросы, пожалуйста, спросите

1 Ответ

0 голосов
/ 29 июня 2018

На самом деле imageView's frame равен .zero в тот момент, когда вы устанавливаете cornerRadius его слоя. Если у вас есть фиксированный размер для imageView, тогда вы можете установить cornerRadius как половину width, и он будет работать нормально. Что-то, как показано ниже,

cell.imageView?.layer.cornerRadius = 50 //If width&height is 100 fix.

Второй вариант - установить правильный cornerRadius с помощью overriding метода layoutSubviews, поскольку этот метод гарантирует, что ваш cell выложил свой размер, и вы получите правильный frame для subViews

class MyTableViewCell: UITableViewCell {

    override func layoutSubviews() {
        super.layoutSubviews()

        self.imageView?.layer.cornerRadius = self.imageView!.frame.width / 2
        self.imageView?.layer.masksToBounds = true
        self.imageView?.layer.borderWidth = 3
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...