Когда я собираюсь заполнить свой 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
}
}
это то, что я хочу, и что я получил:
как выглядит мой tableView:
видео к ошибке:
нет @DonMag, у него есть автоматическая компоновка с раскадровкой в начале и конце
В вашем TableViewCell
: попробуйте вызвать этот метод, который вы в настоящее время вызываете при изменении состояния, как показано ниже:
override func layoutSubviews() {
super.layoutSubviews()
self.button.set(state: self.state)
}
Надеюсь, я правильно понял вопрос, и это поможет вам.
Добавьте туда же вызов super.layoutSubviews()
.
Если вы спроектировали свою ячейку в раскадровке, используя начальные и конечные ограничения, эти ограничения будут «перекомпонованы» с помощью автоматического макета.
Итак, используя эту строку:
self.frame = CGRect.init(x: 40, y: 190 - 40, width: 180, height: 34)
будет влиять только на фрейм до следующего прохода автоматического макета, например, когда вы прокручиваете tableView.
Вы, вероятно, хотите только дать кнопке ведущее ограничение. Если вы хотите, чтобы он был шире текста, то есть отступы слева и справа, укажите значения кнопки Content Inset
.
я пытался использовать начальное и конечное ограничение IBOutlet для подключения к классу UIButton, но я не знаю, почему у меня происходит сбой. каждый раз, когда начальный или конечный NSLayoutConstraint будет нулевым, например, когда я забыл подключиться.
Похоже, вы смешиваете явную настройку кадра: 'self.frame = CGRect.init(x: 40, y: 190 - 40, ширина: 180, высота: 34)' с авто-макетом. Кнопка находится в виде стека?