sizeToFit 如何确定合适的尺寸?

Posted

技术标签:

【中文标题】sizeToFit 如何确定合适的尺寸?【英文标题】:How does sizeToFit determine appropriate size? 【发布时间】:2013-05-13 20:02:07 【问题描述】:

我有一个应用程序,用户可以在其中随意添加我所谓的调色板。项目 (UIViews) 可以从一个调色板拖到另一个调色板。我想我可以使用sizeToFit 方法在添加或删除项目时自动调整调色板的大小,但似乎没有调整大小。

文档指出该方法将调整大小以适合子视图。这不包括我以编程方式添加的UIViews 吗?

如果我可以让内置的方法为我工作,我真的不必编写自己的 sizeToFit 方法。但它似乎什么也没做。这是我尝试过的代码:

        CGPoint oldCenter = self.pieceBeingMoved.center;
        CGPoint newCenter = [self.pieceBeingMoved.superview convertPoint:oldCenter toView:destinationView];
        [destinationView addSubview:self.pieceBeingMoved];
        self.pieceBeingMoved.center = newCenter;
        if (destinationView.tag == 20000) 
           NSLog(@"DestinationView is a palette, so resize it from %@",NSStringFromCGRect(destinationView.frame));
           [destinationView sizeToFit];
           NSLog(@"DestinationView resized to %@",NSStringFromCGRect(destinationView.frame));
        

添加子视图前后大小相同。添加的子视图是我运行此测试时唯一的子视图,子视图的大小约为它要移动到的调色板大小的 5%。那么为什么不调整视图的大小呢?我需要自己做吗?

【问题讨论】:

【参考方案1】:

sizeToFit 方法只是调用sizeThatFits:,然后相应地调整视图大小。 UIView 类的默认实现返回当前大小,因此您看不到任何效果。您必须编写自己的 sizeThatFits: 方法来进行计算。

【讨论】:

我仍在努力理解它是如何工作的。听起来我需要子类化我的视图才能编写 sizeThatFits: 方法,如果我要在其上使用 sizeToFit。是对的吗?我认为简单地编写一个方法来重置我的控制器中的框架会更容易,然后我不必担心子类化。我错过了什么吗? 对,如果你想使用 sizeToFit,你必须继承 UIView。您还可以在视图控制器中实现此功能。这完全取决于您希望如何使用您的视图。 另一个问题。如果我自己在视图控制器中进行编码,我假设除了更改视图的框架之外,我还必须更改其所有子视图的框架。这是由 sizeToFit 自动完成的吗?我希望文档能详细说明这些方法的实际工作原理。 @VictorEngel 在我看来您的问题已经得到解答。如果您还有其他问题,请提出新问题... @matt,我很确定如果我创建了一个问题,询问使用 sizeToFit 调整大小的视图的子视图是否会自动重置子视图的框架,它将被关闭,因为它不是一个真正的问题。它与我最初的问题非常密切相关,所以我认为它属于这里。【参考方案2】:

这是一个想法。 不要致电sizeToFit。只需将框架设置为您真正想要的框架即可。

【讨论】:

不幸的是,这需要查看所有子视图的大小和位置。我以为 sizeToFit 正在看那个。文档似乎表明了这一点。如果是这样,那将节省一些精力。你知道他们说什么,不要重新发明***。 没有***。您创建的 UIView 子类不会自动知道您想要它的大小。你必须以某种方式告诉它。 好的。但是文档暗示它确实知道:“调整并移动接收器视图,使其仅包含其子视图。”我想要的大小是只包含子视图的大小。

以上是关于sizeToFit 如何确定合适的尺寸?的主要内容,如果未能解决你的问题,请参考以下文章

如果 sizeToFit 依赖于 layoutSubviews,如何实现?

我不确定我的 iOS 应用程序图标的 dpi 大小是不是合适

threeJS 导入模型(不确定尺寸)后如何确定相机位置及物体缩放比例

如何确定 ANSI 端子的尺寸?

mfc dialog 尺寸无法固定控件位置如何确定?

如何确定移动应用程序中可以合理呈现多少列? (屏幕尺寸/分辨率/方向)