1

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

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

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

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

使用界面生成器,我尝试将右侧细节标签(项目位置)的水平内容拥抱优先级和抗压优先级设置为 1000,我什至将城市标签的水平内容拥抱优先级和抗压优先级设置为 1,但这并没有似乎不起作用。(它看起来仍然像第二个屏幕截图)。

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

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

其中 locationField 是位置 UITableViewCell 的一个出口。如果没有城市文本标签的代码,setNeedsLayout则无法适应城市名称,这就是我使用它的原因。

我正在使用 XCode 4.6 并针对 iOS 6.1

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

提前致谢, 伊多

4

1 回答 1

0

使用自动布局的另一种选择是使用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:协议方法中的单元格之前构造和调整标签大小。

于 2013-04-20T18:31:59.903 回答