当两者具有相同的超级视图时,根据其他子视图居中子视图
Posted
技术标签:
【中文标题】当两者具有相同的超级视图时,根据其他子视图居中子视图【英文标题】:center subview according to other subview when both have the same superview 【发布时间】:2015-03-06 12:56:08 【问题描述】:如果我有 contentView 和 2 个子视图。 我想根据 subviewB 将 subviewA 居中
subviewA 和 subviewB 具有相同的父视图。
这就是我现在要在 uitableview 上方居中的 subviewA(活动指示器)。
self.subViewA.frame = CGRectMake(CGRectGetMidX(self.tableView.frame)-self.subViewA.bounds.size.width/2,
CGRectGetMidY(self.tableView.frame)-self.subViewA.bounds.size.height/2,
self.subViewA.bounds.size.width,
self.subViewA.bounds.size.height);
有更清洁/更短的方法吗?任何存在的方法,我错过了:)?
我想也许有类似的东西:subviewA.frame = centerInOtherFrame(self.subviewB.frame)
【问题讨论】:
约束?如果你得到框架等,你可以通过代码来完成。 您的视图会有一些动态行为吗?你在使用自动布局吗? 我更新了这个问题。我没有使用自动布局。只能通过 layoutSubViews 中的代码。 【参考方案1】:您的方法可以简化为
self.subViewA.center = self.tableView.center;
【讨论】:
TableView 的中心位于其父视图的坐标中。 SubViewA 的中心应该在 TableView 的坐标中。因此,如果没有适当的坐标转换,这将无法工作。 @Taha "subviewA 和 subviewB 具有相同的超级视图。" 是的,这是真的。但是想象一下:tableView frame=>(0,600,300,300)。所以 tableView.center 是 (150,300)。还假设 subView 的 size=>(100,100)。现在如果你将子视图的中心设置为表格视图的中心,子视图的框架将变为(100,200,100,100)。这意味着子视图不在 tableView 中居中,而是在底部。这就是我想要表达的观点。 @Taha 在你的例子中tableView.center
实际上是(150, 750)
和subview.frame
是(100, 700, 100, 100)
,它在tableView
上方居中(假设它们都在同一个容器中)以上是关于当两者具有相同的超级视图时,根据其他子视图居中子视图的主要内容,如果未能解决你的问题,请参考以下文章
Autolayout - 使超级视图高度等于子视图高度+常量,其中子视图是 textView