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 大小是不是合适