улучшений других ответов
Для Джеймса Куанга, Kappe, accessoryView
- ноль для дополнительного вида по умолчанию.
Для Matjan, subviews.lastObject
- это просто неправильное представление, как UITableViewCellSeparatorView.
Для Алексея, Ана, Томаш, перечисление подпредставлений, пока мы не найдем неизвестное, которое пока работает. Но это трудоемко и может быть легко сломано в будущих версиях, если, скажем, Apple добавит backgroundAccessoryView
.
Для larshaeuser перечислять подпредставления до тех пор, пока мы не найдем UIButton, это хорошая идея, но contentEdgeInsets
недостаточно заметно меняет вид аксессуара.
решение для Swift 3.x и 4.0
Мы будем перечислять и искать последний UIButton.
class AccessoryTableViewCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
if let lastButton = subviews.reversed().lazy.flatMap({ $0 as? UIButton }).first {
// This subview should be the accessory view, change its origin
lastButton.frame.origin.x = bounds.size.width - lastButton.frame.size.width - 5
}
}
}
для Swift 4.1 и новее
class AccessoryTableViewCell: UITableViewCell {
override func layoutSubviews() {
super.layoutSubviews()
// https://stackoverflow.com/a/45625959/1033581
if let lastButton = subviews.reversed().lazy.compactMap({ $0 as? UIButton }).first {
// This subview should be the accessory view, change its origin
lastButton.frame.origin.x = bounds.size.width - lastButton.frame.size.width - 5
}
}
}