【问题标题】:question about UIView's sizeThatFits [duplicate]关于 UIView 的 sizeThatFits 的问题 [重复]
【发布时间】:2017-04-14 10:43:12
【问题描述】:

可能重复:
iPhone — the input parameter to UIView's sizeThatFits method

具体来说,它的论点应该是什么?文档说它是接收器的当前大小,但是视图总是可以使用self.bounds.size,所以这没有意义。

它应该是可用空间吗?换句话说,父母是否在问孩子,“鉴于有 X x Y 点的可用空间,你想成为多大?”。

【问题讨论】:

    标签: iphone cocoa-touch ios


    【解决方案1】:

    当文档说“接收器的当前大小”时,我只是认为文档是错误的。这只是一个用例,但还有其他用例:例如,如果您希望视图在给定任意大小的情况下返回其最佳大小,您将调用此方法并将您的任意大小作为参数传递。

    它应该是可用空间吗?换句话说,父母是不是在问孩子,“鉴于有 X x Y 点的可用空间,你想要多大?”。

    是的,您已经明白了,但不要将参数的含义限制为“可用空间”。它只是一个任意大小,可能对应于或不对应于可用空间。这取决于您如何使用该方法。但是,如果视图必须适合作为参数传递的大小,则视图应该始终返回它认为的最佳大小(最适合其子视图的大小)。

    看这里,这应该回答你的问题:iPhone -- the input parameter to UIView's sizeThatFits method

    【讨论】:

      【解决方案2】:

      差不多就是这样。 UIPickerViewUILabel 等类的内容在特定尺寸下效果最佳,因此它们返回这些特定尺寸而不是更一般的 bounds 尺寸。

      【讨论】:

      • 也许我不够清楚。我的意思是问:为什么函数需要带参数?如果视图想知道它当前的大小,它可以使用 self.bounds。
      【解决方案3】:

      简单地 sizeThatFit: 方法必须被新的 CGSize 覆盖,并且 sizeToFit 方法调用 sizeThatFit 来调整大小。

      【讨论】:

      • 你还没有回答我的问题:为什么 sizeThatFits 需要将视图的当前大小作为参数,而它只能读取 self.bounds.size?
      【解决方案4】:

      sizeThatFits 可以在父视图布局其子视图时使用。

      假设您有一个 300 像素宽的超级视图,但您还不知道它的高度 - 高度将基于子级高度的总和。在这种情况下,superview 会将一个 size 传递给 sizeToFit,它表示剩余的可用空间,这将不同于 superview 的边界。

      【讨论】:

      • 这与我在问题中引用的文档相矛盾——参数应该是孩子的界限,但孩子已经知道它的界限。
      猜你喜欢
      • 2011-09-22
      • 2015-01-03
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多