UITableViewCell selectedBackgroundView цвет не виден при сборке на iOS 13 - PullRequest
1 голос
/ 25 сентября 2019

Я выделил ячейке табличного представления цвет при выделении в cellForRowAtIndexPath, используя

    let backgroundView = UIView()
    backgroundView.backgroundColor = UIColor.grey3 //custom color
    cell.selectedBackgroundView = backgroundView

Так как я строю с Xcode 11.0, цвет больше не распространяется на подпредставления ячейки на iOS 13устройство или симулятор.Если я собираюсь на симуляторе iOS 12.2 с использованием Xcode 11.0, он все равно работает.

У кого-нибудь есть идеи, что изменилось, чтобы вызвать такое поведение?Я работаю с .xib файлами.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

У меня была такая же проблема, мои решения:

TableViewController:

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

    let cell = tableView.dequeueReusableCell(withIdentifier: "testCell")! as! TestCell

    // Turn off selection style for iOS12, iOS11, etc...  
    cell.selectionStyle = .none

    return cell
}

Класс ячейки (у меня есть UIView внутри ContentView ячейки):

class TestCell: UITableViewCell {

    @IBOutlet weak var testCellBackgroundView: UIView!

    override func setSelected(_ selected: Bool, animated: Bool) {
        super.setSelected(selected, animated: animated)

        if selected {
            contentView.backgroundColor = UIColor.white
            testCellBackgroundView.backgroundColor = UIColor.red
        } else { 
            contentView.backgroundColor = UIColor.white
            testCellBackgroundView.backgroundColor = UIColor.green // default background color
        }
    }

    // You may change highlighted color of a cell the same way
    override func setHighlighted(_ highlighted: Bool, animated: Bool) {
        super.setHighlighted(highlighted, animated: animated)

        if highlighted {
            contentView.backgroundColor = UIColor.white
            testCellBackgroundView.backgroundColor = UIColor.red
        } else {
            contentView.backgroundColor = UIColor.white
            testCellBackgroundView.backgroundColor = UIColor.green
        }
    }   
}

Примечание: это мой первый ответ в stackoverflow, пожалуйста, проверьте, правильно ли он.

0 голосов
/ 25 сентября 2019

От Apple Примечания к выпуску iOS 13 :

Класс UITableViewCell больше не изменяет свойства backgroundColor или isOpaque для contentView и любых его подпредставлений, когда ячейки становятся подсвеченными или выделенными,Если вы устанавливаете непрозрачный backgroundColor для любых подпредставлений ячейки внутри (и в том числе) в ContentView, это может повлиять на внешний вид, когда ячейка будет выделена или выделена.Самый простой способ решить любые проблемы с вашими подпредставлениями - убедиться, что их backgroundColor имеет значение nil или clear, а их непрозрачное свойство - false.Однако при необходимости вы можете переопределить методы setHighlighted (: animated :) и setSelected (: animated :), чтобы вручную изменить эти свойства в ваших подпредставлениях при переходе к выделенным и выделенным состояниям или из них.

Мой быстрый тест подтверждает, что это может быть причиной в вашем случае.

Ячейка с зеленым фоном, оранжевый вид как .selectedBackgroundView.

iOS 12:

enter image description here

iOS 13:

enter image description here

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