UIButton高度在UITableView上设置不正确



我有一个包含项目列表的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方法并尝试更改两个约束(高度顶部)时,应用了值,顶部约束明显更改,但在重用单元格时似乎忽略了高度约束。

我试图强制ClipToBoundstrue,在主线程中强制该方法,但没有一个有效。我在这里错过了什么?


忘了提:按下按钮时,表视图被清除(我向源提供一个空列表,并重新加载数据),执行一个长任务,然后将一个新列表应用于表,但有问题的单元格仍然带有按钮错误

<小时 />

注释:

  • 通过将Alpha更改为0或将Hidden设置为true来隐藏按钮不是一个选项,因为它会在表视图中留下一个

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

最新更新