У меня есть неприятная проблема с автоматической компоновкой, которая встречается в iOS 8, в то время как одна и та же настройка отлично работает в iOS 7.
Я упростил и изолировал проблемную ситуацию, и вот как она должна работать - и как она работает в iOS 7:
Функция состоит из одного вида контейнера (синий) и трех подзадач:
- Ярлык
- Изображение (с нарезанным, масштабированным изображением)
- Кнопка
Я добавил слайдер, который управляет шириной представления контейнера, изменяя ограничение ширины контейнера.
Ограничения автоматической компоновки привязывают ярлык к левой стороне, кнопка к правой стороне, а вид изображения привязан к обеим сторонам без ограничения ширины.
В iOS 8 точно такая же настройка выглядит так:
Обратите внимание, что вид изображения (черная линия), как представляется, привязан к смещению снаружи справа от вида контейнера.
Я пробовал все, и я не могу понять, почему это происходит по-разному в iOS 8. Я удалил и заменил все ограничения несколько раз, но я все равно получаю тот же результат.
Это ограничения, заданные для каждого из подматричек, с уважением:
И это ограничения для представления контейнера:
Ограничение ширины представления контейнера управляется с помощью ползунка следующим образом:
- (IBAction)handleSliderChange:(id)sender
{
self.buttonWidth.constant = self.slider.value * 1024.0;
[self.containerView setNeedsLayout];
[self.containerView setNeedsUpdateConstraints];
[self.containerView layoutIfNeeded];
[self.view setNeedsLayout];
[self.view setNeedsUpdateConstraints];
[self.view layoutIfNeeded];
}
Другие, у которых возникли проблемы с автоматической компоновкой в iOS 8, похоже, смогли решить аналогичные проблемы, вызвав setNeedsLayout
и/или setNeedsUpdateConstraints
непосредственно на содержащем представлении, поэтому я очень четко вызывая его как для представления, так и для корневого представления. Я пробовал все комбинации выше, но ничего, похоже, не имеет значения.
Я начинаю терять надежду найти решение, но, возможно, кто-то здесь столкнулся с подобной ситуацией и может внести определенную ясность в эту проблему?
Изменить: Я должен добавить, что я также попытался установить ограничения из представления изображения на метку и кнопку в противоположность краям содержащего представления с тем же результатом.
Изменить 2: Здесь тестовый проект, который я использовал при попытке изолировать проблему: Загрузить