【发布时间】:2021-11-04 09:14:58
【问题描述】:
如果您将文本设置为 UILabel,它将更新其内容大小以使其全部显示。我想对自定义按钮做同样的事情。但是,如果按钮被隐藏,我不想更改文本,而是将其缩小为零大小。 (类似于 Android 的 VISIBILITY_GONE)
所以我又在玩自动布局系统,但无法解决这个问题:
在我的 XIB 文件中,我定义了一个按钮。该按钮是一个自定义子类,它覆盖intrinsicContentSize。如果按钮被隐藏或它的 alpha 设置为 0,则 intrinsicContentSize 将为 (0,0) ,否则为实际固有大小。
- (CGSize)intrinsicContentSize{
if (self.zeroSizeIfHidden && (self.hidden || self.alpha == 0)) {
return CGSizeZero;
}
CGSize const size = [super intrinsicContentSize];
return size;
}
现在我试图告诉布局系统更新所有相关的布局约束,但失败了。该按钮应该在 UITableViewCell 中可见 - 但它不可见。它只是在下一个“淡入淡出”动画中弹出并隐藏。不,如果不需要,我不能简单地将其从屏幕上删除。当用户点击它时,单元格会增长和缩小。
这是我迄今为止尝试过的,来自我的 UITableViewCell:
if (self.button.hidden || self.button.alpha == 0) {
self.button.hidden = NO;
self.button.alpha = 1;
[self.button invalidateIntrinsicContentSize];
[self.button setNeedsLayout];
[self.button layoutIfNeeded];
[self.button.superview invalidateIntrinsicContentSize];
[self.button.superview setNeedsLayout];
[self.button.superview layoutIfNeeded];
}
我错过了什么?有什么我还没有尝试过的吗?我想我需要一些 Autolayout 大师的帮助。
背景:单元格本身是使用自动布局构建的。它会显示一些信息,并在您点击它时扩展为完整信息。除了完整的信息外,还应显示该按钮 - 在几种情况下。
编辑:
我正在寻找一些想法,如何强制自动布局机制查询按钮的新大小。
(查看实际操作:它是“POI Toolbox”的“信息和文档”表视图。只需点击地图屏幕右下方的“i”按钮。(AppStore:https://apps.apple.com/de/app/poi-toolbox/id1547993322))
【问题讨论】:
-
尝试拼凑一个minimal reproducible example。我们不知道您的视图层次结构是什么,您设置了哪些约束,您如何告诉 UI 进行更改,等等(而且您真的不能指望人们安装一些随机应用程序并试图弄清楚您是什么)再谈)
标签: ios uitableview autolayout