En primer lugar, este método es el legado de AppKit (no en el sentido negativo de la palabra).
Sí, cualquier vista tiene un tamaño actual en cualquier momento dado y puede recuperarla desde la propiedad de límites. Pero hay situaciones complicadas durante el diseño cuando el mejor tamaño depende de factores no totalmente estáticos. Tome una etiqueta de texto, por ejemplo. Puede fluir en una o más líneas y el número de líneas puede depender del ancho máximo permitido. Entonces, una posible implementación de UILabel podría derivar su tamaño de límites del ancho del CGSize pasado a sizeThatFits :, en cuyo caso ese tamaño no es literalmente el tamaño actual del receptor, sino un tamaño deseado/límite.
Por lo tanto, cualquier subclase UIView puede implementar -sizeThatFits: como lo considere apropiado (juego de palabras), e incluso puede ignorar el parámetro de tamaño. Con más frecuencia, cuando tengo que implementar este método, lo ignoro porque puedo calcularlo desde el estado interno de la vista, pero en un escenario más complejo puede que necesite usar el parámetro de tamaño para indicarle ciertas restricciones en el diseño.
En otras palabras, la documentación es incorrecta cuando dice que el argumento es el tamaño del receptor y, de hecho, es el tamaño que el padre preferiría que el niño usara. Ciertamente he escrito el código de esa manera, pero quiero confirmar si eso es lo que quieres decir. –
Una cosa es cierta, la implementación predeterminada de 'sizeToFit' llama' sizeThatFits: ', pasando' self.bounds.size'. – Costique
Oh, yo no sabía eso. Como no está documentado, definí saneSizeToFit en UIView a través de una categoría, que invoca sizeThatFits con un tamaño bien definido :) –