У меня проблема с настройкой радиуса угла в представлении, потому что с момента обновления Xcode до 8 кадры представлений в большинстве случаев устанавливаются на 1000x1000 вместо соответствующего размера.
Существует аналогичный вопрос здесь, но я хотел бы добавить немного больше информации в надежде, что кто-то найдет ответ или обходной путь.
В одном из экземпляров у меня есть ячейка таблицы, которая имеет представление изображения, созданное в раскадровке. Его ширина и высота устанавливаются как постоянные с ограничением (до 95). Радиус угла установлен в layoutSubviews
, который работает сейчас:
- (void)layoutSubviews
{
[super layoutSubviews];
self.myImageView.layer.cornerRadius = self.myImageView.frame.size.width/2.0f;
}
Итак, я немного поиграл с пробной версией и ошибкой, и ситуация кажется немного лучше, если я попытаюсь запустить макет после того, как изображение будет установлено (изображение будет извлечено с удаленного сервера), вызвав:
self.myImageView.image = image;
[self.myImageView setNeedsLayout];
[self setNeedsLayout];
[self layoutIfNeeded];
Тем не менее это не работает в большинстве случаев. Теперь смешная часть:
У меня есть случай этого контроллера представления на панели вкладок, где, когда я нажимаю вкладку с контроллером целевого представления, будет немедленно вызван вызов подматрицы макета (из UIApplicationMain
), где размер представления изображения равен 1000x1000 но как только изображение установлено, и я вызываю методы компоновки, то подпрограммы компоновки снова вызываются с правильным размером изображения размером 95х95, получая правильный результат.
Вторая ситуация - нажать контроллер вида того же типа, где теперь макет сначала не вызывается, единственный вызов выполняется после того, как изображение установлено, а макет принудительно. Результат снова имеет вид изображения размером 1000x1000, устанавливая радиус угла до 500, и изображение не видно.
Итак, есть ли хорошее решение для исправления этих странных значений фрейма? У меня такая же проблема для нескольких контроллеров представлений, ячеек таблицы. Все это использовалось для работы до обновления.
Есть ли у кого-нибудь идеи, что является источником этой проблемы? Является ли это из раскадровки или какой-то настройки миграции или это какая-то ошибка макета, представленная с этой версией программного обеспечения?
Теперь я также добавил пробуждение от nib:
- (void)awakeFromNib
{
[super awakeFromNib];
[self.myImageView setNeedsLayout];
[self setNeedsLayout];
[self layoutIfNeeded];
}
Что теперь заставляет макет происходить как минимум 2 раза в моем случае, а во второй раз правильные кадры. Тем не менее это далеко не ответ, это ужасно, и я хотел бы просить его, так как мне нужно будет использовать его во всех ячейках для каждого из изображений, кнопок.