【问题标题】:What can i do to resize a UIView to fit its subviews?我该怎么做才能调整 UIView 的大小以适应其子视图?
【发布时间】:2012-06-05 15:51:03
【问题描述】:

我知道我必须使用 -sizeThatFits: 方法并在 superView 中覆盖它。但是,我应该在这种方法中做什么?我应该只计算我的视图的新大小,还是应该向它的子视图发送一些消息?也许 -sizeThatFits: 和 -sizeToFit: 消息?而且,我应该何时以及如何向我的 superView “说”是时候调整其框架的大小了?

【问题讨论】:

    标签: iphone objective-c ios uiview sizetofit


    【解决方案1】:

    关于您问题的第一部分:您的-sizeThatFits:implementation 永远不应在子视图上调用-sizeToFit:。前者是一种计算视图大小的方法(根本不改变它),而后者实际上改变视图的大小。

    您绝对可以将 -sizeThatFits: 调用转发给您的子视图,如果这有助于您的视图大小计算。

    关于你问题的第二部分:你不应该告诉你的 superview 什么时候调整你的视图,通常情况下。它应该是相反的:控制器或父视图应该首先尝试调整子视图的大小。

    来自 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。您需要自己为自定义视图实现该方法。

    【讨论】:

    • 这是正确的。除非像某些 UIKit 控件那样在 -init 中设置合理的默认值,否则您永远不应该真正设置自己的框架。视图控制器设置您的框架,当它被调用时,您将所有内容放在-layoutSubviews 中。如果父母想知道给定高度或宽度所需的尺寸,您可以实现 sizeThatFits。在-layoutSubviews-sizeThatFits 之间共享代码是麻烦的地方。
    • 谢谢!但是,如果我用动画 调整子视图的大小(在 subView 方法中调整大小。我想创建自定义视图,这将是我的子视图,标签下方包含 UILabelView 和 UITableView,这将改变其行数),毕竟我应该将消息 -sizeToFit 发送到它的 superView 吗?
    • 不,视图不应该直接知道它的父视图(或发送消息)——那将是一个糟糕的设计选择。您能否澄清“如果我用动画调整子视图的大小”是什么意思?更具体地说:您会为此目的调用什么方法,以及什么对象将是消息的发送者?
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2013-04-12
    • 1970-01-01
    • 2017-01-24
    相关资源
    最近更新 更多