动态高度的iOS单元格宽度不好

时间:2015-03-11 17:37:28

标签: ios uitableview swift autolayout

首先是我想要的。我想让动态高度的单元格随着文本的长度而变化。像图像中的东西:

cells in tableView

正如你所看到的,第二个细胞已经过了边缘。

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

tableView autolayout constraints

我使用自己的xib文件创建了自定义SwitchCell: enter image description here

Label具有以下自动布局设置:

Label autolayout constraints

切换这些:

Switch autolayout constraints

在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

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

3 个答案:

答案 0 :(得分:2)

或许在标签上设置最大宽度约束,或者从其后端到superview设置> =约束。现在,横向的所有内容都是"等于"固定值。您需要限制标签宽度,使用它与Switch之间的不等式约束,和/或使用约束优先级来保持标签不扩展。 estimatedRowHeight和自动尺寸应该仍然允许它垂直扩展。 -

答案 1 :(得分:0)

因此,对于您的标签,您可以将自动缩小到最小字体大小,然后您可以避免在文本太长时消失。问题是你只是在你的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中具有相同的逻辑。

答案 2 :(得分:0)

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

enter image description here