我试过在SO上搜索这个,但没有运气找到适合我情况的东西。
这是我的层次结构以及我正在尝试做的事情:
// -> view
// -> -> myLabel //I'd like to have this match center.x with...
// -> -> tableView
// -> -> -> tableViewCell
// -> -> -> -> UIStackView
// -> -> -> -> -> mySwitch //...this, before everything appears
有关如何实现这一目标的任何建议?非常感谢所有帮助。谢谢!
编辑:此代码适用于定位,但在它出现之前不会运行。它在一个单元格必须加载/重用时运行,因此它首先出现在错误的位置:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
if let cell = tableView.dequeueReusableCellWithIdentifier("myCell") as? myCell {
cell.configureCell(myArray[indexPath.row])
let centerPoint = cell.mySwitch.convertPoint(cell.mySwitch.center, toView: self.view)
myLabel.center.x = centerPoint.x - (myLabel.frame.width / 2)
return cell
} else {
return myCell()
}
}
答案 0 :(得分:0)
我不确定我理解你的问题,但你可以尝试使用
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
你可以参考单元格并使用cell.yourSwitch.frame.origin获取位置
答案 1 :(得分:0)
更新:感谢大家的帮助。对于任何感兴趣的人,我放弃了并使用了界面构建器中的大小类,尽管以编程方式执行它会更加理想(保持东西更清洁IMO,而不是必须为每个大小类定制它。现在两个物品实际上并没有相互约束,我手动定位它们。将此问题留给任何想要评论或阅读的读者!
答案 2 :(得分:0)
根据您的评论,这是您应该做的事情(虽然我不推荐,因为它会影响您应用的效果)
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath)
{
//Option 1
(cell as! MyCell).mySwitch...
//Option 2
let cell: MyCell = cell as! MyCell
cell.mySwitch...
}
但是如果我理解正确并且所有开关都位于每个单元中的同一级别,那么您需要做的就是以与放置其他所有内容相同的方式放置标签,这样它看起来与开关对齐而无需实际上将它们捆绑在一起。