我有一个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
答案 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:
协议方法中返回单元格之前构造和调整标签大小。