如何在表格视图的子视图显示之前获取它的位置?

时间:2016-07-02 14:44:50

标签: ios swift uitableview uiview

我试过在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()
    }
}

3 个答案:

答案 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...
}

但是如果我理解正确并且所有开关都位于每个单元中的同一级别,那么您需要做的就是以与放置其他所有内容相同的方式放置标签,这样它看起来与开关对齐而无需实际上将它们捆绑在一起。