无法使表格视图单元格中的内容阻力有效

时间:2013-04-20 17:51:46

标签: ios xcode autolayout

我有一个UITableViewController,它有一个显示位置的静态字段。 这个静态字段的样式是“正确的细节”。 单元格的左侧显示用户选择的城市,右侧显示标签为“项目位置”的公开指示器。

当用户首次导航到此控制器时,左侧标签设置为“无位置”,一切看起来都很好,如下所示:(由于我没有代表,因此无法发布图像)
“没有位置商品位置>”

问题在于,如果我设置一个长城市名称(例如“Rancho Santa Margarita,California”),“项目位置”标签会缩小并填充省略号(...)
“Rancho Santa Margarita,California It ...>”

我想要发生的是,当用户选择一个长城市名称时,城市标签将占用尽可能多的空间而不会导致“项目位置”标签缩小。 所以基本上它看起来像这样:
“Rancho Santa Margarita,...项目位置>”

使用界面构建器我尝试将右侧详细信息标签(项目位置)的水平内容拥抱优先级和压缩阻力优先级设置为1000,我甚至将城市标签的水平内容拥抱优先级和压缩阻抗优先级设置为1,但这似乎不起作用。 (它仍然看起来像第二个截图)。

还有一件事,当用户选择新位置时,我使用以下方法更新位置文本:

- (void)setLocationText:(NSString *)text {
    self.locationField.textLabel.text = text;
    [self.locationField setNeedsLayout];
}

其中locationField是UITableViewCell位置的出口。 如果没有代码setNeedsLayout,城市文字标签就不会增长到适合城市名称,所以这就是我使用它的原因。

我正在使用XCode 4.6并定位iOS 6.1

你们知道这可能是什么问题吗?

提前致谢, IDO

1 个答案:

答案 0 :(得分:0)

使用autolayout的另一个选择是将UITableViewCell子类化为两个标签出口并实现layoutSubviews

- (void)layoutSubviews {
    [super layoutSubviews];

    CGSize rightLabelSize = [self.rightLabel sizeThatFits:self.contentView.frame.size];

    CGRect rightLabelFrame = CGRectZero;
    rightLabelFrame.origin.x = self.contentView.frame.size.width - rightLabelSize.width;
    rightLabelFrame.size = rightLabelSize;
    self.rightLabel.frame = rightLabelFrame;

    CGRect leftLabelFrame = CGRectZero;
    leftLabelFrame.size.width = self.contentView.frame.size.width - rightLabelSize.width;
    self.leftLabel.frame = rightLabelFrame;
}

请注意,这不会添加填充或非常关心标签的高度,因此您需要修改以解释这些问题。

如果您不喜欢子类化,那么您可以在控制器tableView:cellForRowAtIndexPath:协议方法中返回单元格之前构造和调整标签大小。