在UITableView

时间:2017-12-05 16:38:12

标签: ios uitableview xamarin.ios uibutton nslayoutconstraint

我有一个UITableView,其中包含一系列项目。对于该表中的每个UITableViewcell,根据关联对象到该单元格的属性,我通过将高度约束常量更改为0或者定义为要生成的值来切换UIButton的可见性。它可见。我已经在Xcode设计器上检查了该按钮的Clip to Bounds选项。

如果我向表格视图提供了一些项目列表,这些项目设置了一些可见的按钮,而其他项目隐藏并滚动,那么按钮可见的单元格可能会隐藏,反之亦然。当按钮上有少数单元格时,这一点更明显,没有按钮的情况下则更明显。

包含显示隐藏 UIButton的逻辑的方法来自单元格的UITableViewCell自定义类,因为它如下:

public partial class UITableViewCellCustom : UITableViewCell
{
    public Object obj;

    public void SetObject(Object obj)
    {
        // Do something with obj...

        // Do something with the obj that determines if the buttons should be collapsed or not
        Boolean collapseButton = ...;

        ToggleButtonVisibility(collapseButton);
    }

    private void ToggleButtonVisibility(Boolean collapse) 
    {
        NSLayoutConstraint uiButtonCancelHeightConstraint = UIButtonCancel.Constraints
            .FirstOrDefault(query => query.FirstItem == UIButtonCancel
                                  && query.FirstAttribute == NSLayoutAttribute.Height);

        NSLayoutConstraint uiButtonCancelTopConstraint = this.ContentView.Constraints
            .FirstOrDefault(query => query.FirstItem == UIButtonCancel
                                  && query.FirstAttribute == NSLayoutAttribute.Top);

        if (collapse)
        {
            uiButtonCancelHeightConstraint.Constant = 0;
            uiButtonCancelTopConstraint.Constant = 0;
        }
        else
        {
            uiButtonCancelHeightConstraint.Constant = 30;
            uiButtonCancelTopConstraint.Constant = 10;
        }
    }
}

SetObject类调用UITableViewSource方法,该类从正确的索引获取对象并将其设置为单元格(此处没有问题)。然后,当一些UILabel文本用对象的值更改时,我检查按钮是否需要(这里没问题)。当我调用ToggleButtonVisibility方法,并尝试更改两个约束 - 高度顶部 - 应用值时,顶部< / strong>约束明显改变,但重用单元格时,高度约束似乎被忽略。

我试图强制ClipToBoundstrue,强制主线程中的方法,但没有一个工作。我在这里缺少什么?

忘记提及:按下按钮时,表视图被清除(我向源提供空列表,然后重新加载数据),执行长任务,然后执行新操作列表应用于表格,但有问题的单元格仍保留 bugged 按钮。

说明:

  • 通过将Alpha更改为0或将Hidden设置为true隐藏按钮不是一种选择,因为它会留下洞< / em>在tableview中。

1 个答案:

答案 0 :(得分:0)

通过将UIButton包装在UIView上,然后根据我的需要调整视图大小来解决此问题。