У меня есть UIView, который в этом случае имеет 4 подпредставления.Я хочу иметь возможность изменить порядок, в котором находятся подпредставления, но я не могу использовать
[UIView insertSubview: atIndex:]
В одном конкретном случае, если я вызываю его, чтобы переместить элемент из индекса 2 в индекс 1,вместо этого он помещает его в индекс 0. Вот выходные данные отладчика:
(lldb) po self.subviews
<__NSArrayM 0x600003084f30>(
<ViewA: 0x7fb075cee4c0; frame = (20 12; 399.5 35.32); ...>,
<ViewB: 0x7fb075cf1b60; frame = (20 59.32; 399.5 27.5); ...>,
<ViewC: 0x7fb075cef2c0; frame = (20 98.82; 399.5 67); ...>,
<ViewD: 0x7fb075cfa750; baseClass = UIButton; frame = (20 177.82; 399.5 35); ...>)
(lldb) po self.subviews[2]
<ViewC: 0x7fb075cef2c0; frame = (20 98.82; 399.5 67); ...>
(lldb) po [self insertSubview:self.subviews[2] atIndex:1]
(lldb) po self.subviews
<__NSArrayM 0x600003085020>(
<ViewC: 0x7fb075cef2c0; frame = (20 98.82; 399.5 67); ...>,
<ViewA: 0x7fb075cee4c0; frame = (20 12; 399.5 35.32); ...>,
<ViewB: 0x7fb075cf1b60; frame = (20 59.32; 399.5 27.5); ...>,
<ViewD: 0x7fb075cfa750; baseClass = UIButton; frame = (20 177.82; 399.5 35); ...>)
Как вы можете видеть, я пытался переместить ViewC после ViewA, но вместо этого он пошел до него.Если я вместо этого использую
[UIView insertSubView: aboveSubview:]
Это прекрасно работает.
Я попытался удалить представление перед вставкой, но это дало мне тот же результат.Это очень странно, и я чувствую, что мне не хватает фундаментальной части UIView здесь.Я могу жить с обходным путем, но я действительно предпочел бы понять, почему он не работает.
[ОБНОВЛЕНИЕ] Был один дополнительный бит информации, который оказывается существенным.У меня есть дополнительный CALayer, который я использую, чтобы выделить родительский вид.Так что, если я отключу этот CALayer, то все работает нормально.Я могу ошибаться, но это означает, что insertSubviews
фактически перемещает CALayers.Означает ли это, что self.subviews
- это просто вспомогательная функция для получения UIViews, связанных с CALayers, на основе self.layer.sublayers
?.Во всяком случае, я нашел своего виновника, и, похоже, в моем понимании CALayers определенно не хватает подвидов.