UITableView 上的 UIButton 高度未正确设置
UIButton height not being set correctly on UITableView
我有一个 UITableView
,其中包含一个项目列表。对于 table 中的每个 UITableViewcell
,取决于从关联对象到该单元格的 属性,我通过将高度约束常量更改为 0 来切换 UIButton
的可见性,或定义为使其可见的值。我已经检查了 Xcode 设计器上那个按钮的 Clip to Bounds
选项。
如果我向 table 视图提供一个项目列表,将一些按钮设置为可见,将其他设置为 隐藏 并滚动,使按钮可见的单元格可能隐藏,反之亦然。当带有按钮的单元格很少而其余单元格没有按钮时,这会更加明显。
包含 显示 或 隐藏 逻辑的方法 UIButton
来自 UITableViewCell
为单元格自定义class,如下:
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
class 调用,从正确的索引获取对象并将其设置到单元格(这里没问题)。然后,当一些 UILabel
s 文本被对象的值更改时,我检查是否需要按钮(这里没问题)。当我调用 ToggleButtonVisibility
方法并尝试更改两个约束 - height 和 top - 应用值, top 约束明显改变,但 height 约束似乎在重用单元格时被忽略。
我试图将 ClipToBounds
强制为 true
,强制在主线程中使用该方法,但其中 none 有效。我在这里错过了什么?
忘记提及: 当按下按钮时,table 视图被清除(我为源提供一个空列表,并重新加载数据),一个执行长任务,然后将新列表应用于 table,但有问题的单元格仍带有按钮 bugged.
备注:
- 通过将
Alpha
更改为 0
或将 Hidden
设置为 true
来隐藏按钮不是一个选项,因为它会留下 hole tableview.
通过将 UIButton
包装在 UIView
上然后根据我的需要调整视图大小解决了这个问题。
我有一个 UITableView
,其中包含一个项目列表。对于 table 中的每个 UITableViewcell
,取决于从关联对象到该单元格的 属性,我通过将高度约束常量更改为 0 来切换 UIButton
的可见性,或定义为使其可见的值。我已经检查了 Xcode 设计器上那个按钮的 Clip to Bounds
选项。
如果我向 table 视图提供一个项目列表,将一些按钮设置为可见,将其他设置为 隐藏 并滚动,使按钮可见的单元格可能隐藏,反之亦然。当带有按钮的单元格很少而其余单元格没有按钮时,这会更加明显。
包含 显示 或 隐藏 逻辑的方法 UIButton
来自 UITableViewCell
为单元格自定义class,如下:
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
class 调用,从正确的索引获取对象并将其设置到单元格(这里没问题)。然后,当一些 UILabel
s 文本被对象的值更改时,我检查是否需要按钮(这里没问题)。当我调用 ToggleButtonVisibility
方法并尝试更改两个约束 - height 和 top - 应用值, top 约束明显改变,但 height 约束似乎在重用单元格时被忽略。
我试图将 ClipToBounds
强制为 true
,强制在主线程中使用该方法,但其中 none 有效。我在这里错过了什么?
忘记提及: 当按下按钮时,table 视图被清除(我为源提供一个空列表,并重新加载数据),一个执行长任务,然后将新列表应用于 table,但有问题的单元格仍带有按钮 bugged.
备注:
- 通过将
Alpha
更改为0
或将Hidden
设置为true
来隐藏按钮不是一个选项,因为它会留下 hole tableview.
通过将 UIButton
包装在 UIView
上然后根据我的需要调整视图大小解决了这个问题。