улучшения других ответов
Для Джеймса Куанга, Каппе, accessoryView
равно нулю для представления аксессуаров по умолчанию.
Для Матьяна 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
}
}
}
person
Cœur
schedule
11.08.2017