我知道我必须使用 -sizeThatFits: 方法并在 superView 中覆盖它。但是,我应该在这种方法中做什么?我应该只计算我的视图的新大小,还是应该向它的子视图发送一些消息?也许 -sizeThatFits: 和 -sizeToFit: 消息?而且,我应该何时以及如何向我的 superView “说”是时候调整其框架的大小了?
1 回答
关于你问题的第一部分:你的-sizeThatFits:
实现不应该调用-sizeToFit:
子视图。前者是一种计算视图大小的方法(根本不改变它),而后者实际上改变了视图的大小。
您绝对可以将-sizeThatFits:
呼叫转发到您的子视图,如果这有助于您的视图大小计算。
关于您问题的第二部分:通常,您不应该告诉您的超级视图何时调整视图大小。它应该是相反的:控制器或父视图应该首先尝试调整子视图的大小。
来自 Apple 的文档:sizeThatFits - Implement this method if you want your view to have a different default size than it normally would during resizing operations. For example, you might use this method to prevent your view from shrinking to the point where subviews cannot be displayed correctly.
文档的意思是,如果您的-sizeThatFits:
实现从不返回低于特定大小的框架:该大小基本上将成为调整大小操作期间视图的最小大小。
PS:因为在您的问题主题中,您是在询问如何调整视图大小以适应其内容 - 您应该为此目的使用 sizeToFit 。您需要自己为自定义视图实现该方法。