iPhone - входной параметр для метода UIView sizeThatFits - PullRequest
28 голосов
/ 25 октября 2010

Подпись этого метода:

- (CGSize)sizeThatFits:(CGSize)size

Я не понимаю, для чего используется параметр размера. Документация Apple гласит, что это «Текущий размер получателя».

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

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

Кто-нибудь может объяснить? И есть ли случай, когда этот параметр имеет значение?

Ответы [ 2 ]

26 голосов
/ 25 октября 2010

Прежде всего, этот метод является наследием AppKit (не в отрицательном смысле этого слова).

Да, любой вид в текущий момент имеет некоторый текущий размер и может извлечь его из свойства bounds. Но во время верстки возникают сложные ситуации, когда лучший размер зависит от не совсем статичных факторов. Возьмите текстовую метку, например. Он может быть объединен в одну или несколько строк, и количество строк может зависеть от максимально допустимой ширины. Таким образом, возможная реализация UILabel могла бы получить свой размер границ из ширины CGSize, переданной sizeThatFits:, и в этом случае этот размер буквально не является текущим размером получателя, но некоторым желаемым / предельным размером.

Таким образом, любой подкласс UIView может реализовать -sizeThatFits: так, как считает нужным (каламбур), и даже может свободно игнорировать параметр размера. Чаще всего, когда мне нужно реализовать этот метод, я игнорирую его, потому что могу вычислить его по внутреннему состоянию представления, но в более сложном сценарии вам может потребоваться использовать параметр size, чтобы подсказать себе определенные ограничения в макете.

0 голосов
/ 25 октября 2010

Это не просто размер приемника, это потенциальный размер, который вы хотите заполнить.В результате размер, который, по мнению представления, будет лучше всего отображать его содержимое для заданного ввода size.

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

Подклассы могут применять ограничения, такие как width==height или другие подобные, с использованием этого метода.

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