Этот код печати-отладки
class MyCell: UITableViewCell {
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
self.contentView.addSubview(self.subviewThatGoesOutOfBounds)
}
override func didMoveToSuperview() {
super.didMoveToSuperview()
print("At didMoveToSuperview: \(self.subviews)")
}
override func layoutSubviews() {
super.layoutSubviews()
print("At layoutSubviews: \(self.subviews)")
}
}
Дает мне этот вывод:
At didMoveToSuperview: [<UITableViewCellContentView: 0x7fd876e03b40; frame = (0 0; 320 44); gestureRecognizers = <NSArray: 0x600001893330>; layer = <CALayer: 0x6000016ce1c0>>]
At layoutSubviews: [<UITableViewCellContentView: 0x7f83bf66f2e0; frame = (0 0; 351 71.6667); gestureRecognizers = <NSArray: 0x600003db77e0>; layer = <CALayer: 0x600003276160>>, <_UITableViewCellSeparatorView: 0x7f83bf66eec0; frame = (15 71.6667; 336 0.333333); layer = <CALayer: 0x60000327b9c0>>]
означает, что разделительная линия добавляется не после didMoveToSuperview
, а после layoutSubviews
.
Итак, хотя я не уверен, является ли это самой ранней точкой, во время которой я мог бы изменить расположение подпредставления, кажется, что layoutSubviews
делает трюк просто отлично. Я изменил layoutSubviews
до
override func layoutSubviews() {
super.layoutSubviews()
self.bringSubviewToFront(self.contentView)
}
и мой контент теперь перед разделителями, по желанию.