我在IB中设计了我的定制单元,将其子类化,并将我的插座连接到我的定制类.我在单元格内容中有三个子视图:UIView(cdView)和两个标签(titleLabel和emailLabel).根据每行可用的数据,有时我希望在单元格中显示UIView和两个标签,有时只显示两个标签.我想做的是这样设置约束,如果我将UIView属性设置为hidden,或者将其从superview中删除,两个标签将移到左侧.我试图为10px设置UIView前导约束为Superview(单元格内容),为10px设置UILabels前导约束为下一个视图(UIView).稍后在我的代码中

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(IndexPath *)indexPath {
    
    // ...

    Record *record = [self.records objectAtIndex:indexPath.row];
    
    if ([record.imageURL is equalToString:@""]) {
         cell.cdView.hidden = YES;
    }
}

我隐藏了我的cell.cdView,我希望标签向左移动,但是它们在Cell中保持在相同的位置.我试图从SuperView中删除cell.cdView,但也不起作用.我有附上的图像,以澄清我是关于什么.

cell

我知道如何通过编程来实现这一点,我不寻求解决方案.我想要的是在IB中设置约束,我希望如果删除或隐藏其他视图,我的子视图将动态移动.有没有可能在IB中使用自动布局来实现这一点?

.....

推荐答案

这是可能的,但是你得做一点额外的工作.首先,有几件概念性的事情需要解决:

  • 隐藏视图,即使它们不绘制,在自动布局中为still participate,通常为retain their frames,将其他相关视图保留在它们的位置.
  • 当从视图的超级视图中删除视图时,all related constraints也会从该视图层次 struct 中删除.

在您的情况下,这可能意味着:

  • 如果将左侧视图设置为隐藏,标签将保持不变,因为左侧视图仍然占用空间(即使它不可见).
  • 如果删除左视图,标签可能会受到不明确的约束,因为标签的左边缘不再有约束.

你需要做的是明智地 Select over-constrain个标签.保留现有的约束(与另一个视图的间距为10pts),但添加另一个约束:使标签的左边缘与superview的左边缘的间距为10pts,且具有非必需的优先级(默认的高优先级可能会很好地工作).

然后,当您希望它们向左移动时,请完全删除左视图.左视图的强制10pt约束将随其相关的视图一起消失,而您将只剩下一个高优先级约束,即标签距离其超级视图10pt.在下一个布局过程中,这应该会导致它们向左扩展,直到它们填满superview的宽度,但边缘周围的间距除外.

一个重要的警告:如果您希望左侧视图重新出现在图片中,您不仅必须将其重新添加到视图层次 struct 中,而且还必须同时将其添加到reestablish all its constraints.这意味着每当再次显示该视图时,您需要一种方法将10pt间距约束放回视图及其标签之间.

Ios相关问答推荐

- 目标arm 64-apple-ios9999中的版本号无效'

SwiftUI拖动手势和内容拖动时的奇怪行为( skip /卡顿)

在视图上执行手势会阻止相机操作

SwiftUI检测顶级和安全区域插图

为什么AVSpeechSynthesizer复制的信息比我的文本多?

Strange UIView.animate更改UIButton标题 colored颜色 的行为

SwiftUI 故障/错误 - 在 LazyVStack 和 ScrollView 中使用 AVPlayer 时状态栏不显示

过渡动画在 iOS16 中不起作用,但在 iOS15 中起作用

如何从 Locale Swift 获取货币符号

AppCenter 错误:/usr/bin/xcodebuild 失败,返回码:65

滑动以返回特定的 SwiftUI 视图

在 UICollectionView 上从右到左对齐

无法同时满足约束 - 没有适当的约束

使用导航控制器在prepareForSegue中设置数据

使用 convertPoint 获取父 UIView 内的相对位置

从 NSUserDefaults 字典 iOS 中删除所有键

正确使用 Alamofire 的 URLRequestConvertible

如何删除UITableView中最后一个单元格的最后一个边框?

如何找到 UILabel 的实际行数?

以编程方式确定 iPhone 是否越狱