UITableVIew не в состоянии правильно отобразить UITableViewCell - PullRequest
1 голос
/ 29 мая 2019

Когда я собираюсь заполнить свой tableView различными состояниями, одно состояние действует неправильно, я уверен, что это вызвано задержкой tableView. пожалуйста, сначала посмотрите видео и картинку.

Я заполнил свой UITableView как:

func tableView(_ tableView: UITableView,
              cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cellId")
    cell.state = myStates[indexPath.row]
}

на моем UITableViewCell:

var state: MyCustomDesignState? {
    didSet {
        self.button.set(state: self.state)
    }
}

на моем UIButton:

func set(state: MyCustomDesignState?) {
    switch state { 
    case ...
    case .blackBack:
        self.backgroundColor = background
        self.setTitleColor(textColor, for: .normal)
        self.frame = CGRect.init(x: 40, y: 190 - 40, width: 180, height: 34)
        self.dropFlatShadow(color: #colorLiteral(red: 0.1008123383, green: 0.1008369699, blue: 0.1008091196, alpha: 1))
        self.clipsToBounds = true
        self.layer.cornerRadius = 5
    }
}

это то, что я хочу, и что я получил:

enter image description here

как выглядит мой tableView:

видео с ошибкой:

https://streamable.com/ki7vx

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Если вы спроектировали свою ячейку в раскадровке, используя начальные и конечные ограничения, эти ограничения будут «перекомпонованы» с помощью автоматического макета.

Итак, используя эту строку:

self.frame = CGRect.init(x: 40, y: 190 - 40, width: 180, height: 34)

будет влиять только на кадр до следующего прохода автоматической разметки - например, когда вы прокручиваете tableView.

Возможно, вы захотите назначить кнопке только ведущее ограничение.Если вы хотите, чтобы он был шире, чем текст, то есть отступы слева и справа, задайте кнопке Content Inset значений.

0 голосов
/ 29 мая 2019

В вашем TableViewCell: попробуйте вызвать этот метод, который вы в данный момент вызываете, при изменении состояния, как показано ниже:

override func layoutSubviews() {
          super.layoutSubviews()
          self.button.set(state: self.state)
    }

Надеюсь, я правильно понял вопрос, и это поможет вам.

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