【问题标题】:iOS cell with dynamic height has bad width具有动态高度的 iOS 单元格宽度不好
【发布时间】:2015-03-20 21:57:38
【问题描述】:

首先我想要什么。我想拥有随文本长度变化的动态高度的单元格。像图片中的东西:

如您所见,第二个单元格位于边缘上方。

我是怎么做到的?首先我有一个布局到边缘的表格:

我用自己的 xib 文件创建了自定义 SwitchCell:

标签具有以下自动布局设置:

然后切换这些:

在 viewDidLoad 中我设置了 tableView 属性:

tableView.registerNib(UINib(nibName: SwitchCellIdentifier, bundle: NSBundle.mainBundle()), forCellReuseIdentifier: SwitchCellIdentifier)
tableView.tableFooterView = UIView(frame: CGRectZero)

tableView.rowHeight = UITableViewAutomaticDimension;
tableView.estimatedRowHeight = 44.0;

在 cellForRowAtIndexPath 我有这个:

...
var cell:SwitchCell = tableView.dequeueReusableCellWithIdentifier(SwitchCellIdentifier) as SwitchCell
cell.titleLabel.text = "Receive payments via multipay and lorem ipsum bla bla"
return cell

那么我做错了什么?我应该更改或添加什么?

【问题讨论】:

  • 您能进入 xcode 的可视化调试器,向我们展示单元格的层次结构吗?此外,您是否在日志中收到任何“约束被破坏”的消息?

标签: ios uitableview swift autolayout


【解决方案1】:

也许在标签上设置一个最大宽度约束或从其后沿到超级视图的 >= 约束。现在,所有水平的东西都“等于”固定值。您需要限制标签宽度,在它和 Switch 之间使用不等式约束,和/或使用约束优先级来防止标签扩展。估计行高度和自动尺寸仍应让它垂直扩展。 -

【讨论】:

  • 我不想为标签设置最大宽度。所以我选择为超级视图的后沿添加约束,它工作得很好。谢谢
【解决方案2】:

因此,对于您的标签,您可以安排自动缩小到最小字体大小,然后您可以避免在文本太长时消失。问题是你只是在你的 xib 中给出约束,而不是从 xib 到单元格,因此它看起来像那样,你应该在代码中制作它,只需检查下面的代码,它可能会给你一个如何做到这一点的例子。

NSDictionary *metrics = @{@"viewWidth":[NSNumber numberWithFloat:size.width],
                              @"viewHeight":[NSNumber numberWithFloat:size.height]};

    NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(yourXibView);

    NSArray *constraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[yourXibView]-0-|"
                                                                   options:0
                                                                   metrics:metrics
                                                                     views:viewsDictionary];
    [self.view addConstraints:constraints];

并且不要忘记在上面的代码之前添加yourXibView.translatesAutoresizingMaskIntoConstraints = NO;。此代码仅在目标 c 中,但不用担心它在 swift 中具有相同的逻辑。

【讨论】:

    【解决方案3】:

    尝试增加标签的内容拥抱优先级

    【讨论】:

      猜你喜欢
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多