Подтвердить что ты не робот

Как получить реальный размер UIView с автозапуском

Я новый разработчик iOS.

Я использую авто-макет.

У меня проблема. Я не могу получить реальный размер UIView после ограничений.

Пример, когда я хочу получить размер UIView с ограничением

self.container.frame.size.height

Он всегда возвращает 550 для всех размеров устройства. Но я вижу, что он имеет разностный размер, когда я запускаю его на разностном устройстве.

Спасибо

4b9b3361

Ответ 1

Самое простое решение - просто запустить этот код в -viewDidAppear: (после запуска автозапуска).

Ответ 2

Перед тем, как "получить код реального размера", вставьте следующий код:

[view setNeedsLayout];
[view layoutIfNeeded];

Ответ 3

Поскольку все предполагают, что доступ осуществляется через UIViewController, а не внутри подкласса UIView, ответы не являются действительно полезными. Правильный способ получить правильный размер подкласса UIView находится в layoutSubviews.

Ответ 5

Это потрясающе.

Если вы хотите получить фрейм без использования метода layoutsubviews во время использования автозапуска, используйте его:

dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"View frame: %@", NSStringFromCGRect(view.frame));
    })

Ответ 6

Кажется, что - (CGSize)systemLayoutSizeFittingSize:(CGSize)targetSize; - это то, что вы ищете:

Возвращаемое значение
Размер представления, который удовлетворяет ограничениям, которые он имеет.

Обсуждение
Определяет наилучший размер представления, учитывая все ограничения, которые он имеет, и те, что находятся в его подзонах.

https://developer.apple.com/documentation/uikit/uiview/1622624-systemlayoutsizefittingsize?language=objc

Ответ 7

Лучший момент во время viewDidLayoutSubviews, потому что это происходит до viewDidAppear, поэтому вы все еще можете внести некоторые изменения до отображения представления.

Ответ 8

[посмотреть layoutIfNeed] сохранить меня.

Используйте этот метод, чтобы заставить макет субвью до рисования. Используя представление, которое получает сообщение в виде корневого представления, этот метод определяет поддерево просмотра, начиная с корня.

После вызова этого метода я могу получить фактический размер пользовательского представления в xib. Большое спасибо @Allen и автору.