Почему intrinsicContentSize для UIView всегда возвращает (-1.0, -1.0)? - PullRequest
1 голос
/ 10 мая 2019

UIView с правильным autolayout не возвращает правильный внутренний размер контента.Я получаю (-1,0, -1,0), хотя я вижу, что он правильно настроен как на раскадровке, так и при запуске приложения.

Я попытался создать игровую площадку, которая создает UIView (a) иUILabel.Я добавляю свой ярлык как подпредставление (a) и устанавливаю ограничения left, right, top, bottom.Я также установил некоторый текст и убедился, что мой ярлык имеет правильный внутренний размер (что он и делает).Мое представление (a) возвращает (-1.0, -1.0) для внутреннего размера контента.

Я также попытался создать новый проект с раскадровкой.Я добавил UIView (a) в свой вид и центрировал его (X и Y).Я добавил UILabel к моему (a) представлению и ограничился слева, справа, сверху, снизу.Я вижу, что (а) правильно смотрит размеры.Когда я запускаю приложение, я вижу, что оно по-прежнему имеет правильный размер.Мое представление (a) возвращает (-1.0, -1.0) для внутреннего размера контента.

Я нахожу это чрезвычайно странным, учитывая, что UIView делает макет в соответствии с его внутренним размером контента (то есть подпредставления и связанные ограничения).

Если предположить, что мои ограничения надписей к краям моего (а) вида - все расстояния 0, то я ожидаю, что у моего (а) вида будет внутренний размер содержимого, равный размеру рамки моего ярлыка (которыйосновывается на собственном размере метки, но это своего рода спор)size.

(Фрейм представления (a) возвращает правильный размер, но это на самом деле не отвечает на мой вопрос. Также - это не полезно для моей конкретной ситуации, но это выходит за рамкиэтот вопрос.)

1 Ответ

1 голос
/ 10 мая 2019

Я нахожу это чрезвычайно странным, учитывая, что UIView делает макет в соответствии с его внутренним размером контента (то есть подпредставлениями и связанными ограничениями).

Это просто неправильное понимание того, что такое «внутренний размер контента». Обычный UIView не имеет (значимого) собственного размера контента.

Внутренний размер контента - это свойство, которое реализуют некоторые объекты интерфейса (например, UILabel и UIButton), чтобы у вас не было ограничений по высоте и ширине. Это специальные объекты интерфейса, которые содержат текст (и / или, в случае кнопки, изображение), и могут соответствовать их размеру.

Ваш UIView не такой, и, по сути, вообще не реализует размер встроенного контента. Можно написать подкласс UIView, который реализует внутренний размер контента, ведя себя как UILabel или UIButton; но ты этого не сделал.


Вы говорите в комментарии:

Если у меня есть UIView только с ограничениями Center X и Center Y и учитывая, что он имеет некоторое содержимое, я хотел бы знать, каков его размер после срабатывания autolayout

Хорошо, но это не его собственный размер контента. Это его размер . Если вы находитесь в контроллере вида, реализуйте didLayoutSubviews и посмотрите на bounds.size этого представления. Это тот размер, который вам нужен.

Мне любопытно, как я мог бы вычислить это

Ах, хорошо. Но тогда ты должен был спросить это. Ответ: звоните systemLayoutSizeFittingSize.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...