Ответ 1
Самое простое решение - просто запустить этот код в -viewDidAppear:
(после запуска автозапуска).
Я новый разработчик iOS.
Я использую авто-макет.
У меня проблема. Я не могу получить реальный размер UIView после ограничений.
Пример, когда я хочу получить размер UIView
с ограничением
self.container.frame.size.height
Он всегда возвращает 550 для всех размеров устройства. Но я вижу, что он имеет разностный размер, когда я запускаю его на разностном устройстве.
Спасибо
Самое простое решение - просто запустить этот код в -viewDidAppear:
(после запуска автозапуска).
Перед тем, как "получить код реального размера", вставьте следующий код:
[view setNeedsLayout];
[view layoutIfNeeded];
Поскольку все предполагают, что доступ осуществляется через UIViewController
, а не внутри подкласса UIView
, ответы не являются действительно полезными. Правильный способ получить правильный размер подкласса UIView
находится в layoutSubviews
.
Вы можете просто использовать метод UIView
intrinsicContentSize
о котором вы можете прочитать https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/#//apple_ref/occ/instm/UIView/intrinsicContentSize
Это потрясающе.
Если вы хотите получить фрейм без использования метода layoutsubviews во время использования автозапуска, используйте его:
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
})
Кажется, что - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize;
- это то, что вы ищете:
Возвращаемое значение
Размер представления, который удовлетворяет ограничениям, которые он имеет.Обсуждение
Определяет наилучший размер представления, учитывая все ограничения, которые он имеет, и те, что находятся в его подзонах.
Лучший момент во время viewDidLayoutSubviews
, потому что это происходит до viewDidAppear
, поэтому вы все еще можете внести некоторые изменения до отображения представления.
[посмотреть layoutIfNeed] сохранить меня.
Используйте этот метод, чтобы заставить макет субвью до рисования. Используя представление, которое получает сообщение в виде корневого представления, этот метод определяет поддерево просмотра, начиная с корня.
После вызова этого метода я могу получить фактический размер пользовательского представления в xib. Большое спасибо @Allen и автору.