2015-05-07 41 views
0

我现在有这些的tableView细胞:Objective-C的VisualFormatString - 标签和TextField并排宽度优先的TextField

enter image description here

每个小区是相同类型的。每个在左侧都有一个UILabel,在右侧有一个UITextField。有些时候数据可能会在加载时传递到文本字段中,其他时间用户将手动输入数据到这些字段中。

一切都以编程方式完成。没有故事板。我正在使用Visual Format Strings来设置单元格的样式。

这是我的问题:
我希望标签的宽度随着给定的内容和文本字段的宽度增长,以填充单元格中剩余的可用空间。

这里是我的代码:

NSDictionary* views = @{ @"bsyLeftLabel": self.bsyLeftLabel, @"bsyRightGenericTextField": self.bsyRightGenericTextField }; 

    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-18-[bsyLeftLabel]-[bsyRightGenericTextField]-18-|"] 
                      options:0 
                      metrics:nil 
                       views:views]]; 

正如你可以看到我有与标签和文本字段之间的默认间距单元格的左右两端一个18点的填充。

如何获得标签的宽度与其中的文本一样大,以及用于填充单元剩余宽度的文本字段?

非常感谢您的帮助。

回答

0

该代码给你带来了什么结果?当我在故事板上做同样的设置时,我会得到你想要的结果。如果你没有得到这个结果,你可能需要将标签的内容拥抱优先级设置为比文本字段更高的值(在故事板中,你会自动获得该值,但我不知道是否会发生这种情况码)。

如果您始终希望标签完全显示其文本,则还需要将其内容压缩阻力提高到高于文本字段(默认为750)的级别。

[self.label setContentCompressionResistancePriority: 751 forAxis:UILayoutConstraintAxisHorizontal]; 
+0

上面的代码给了我你在图片中看到的内容。 –

+0

@KraigWastlund,你是否尝试设置内容拥抱优先级,因为我建议? – rdelmar

+0

设置拥抱标签上的内容,但现在文本字段的内容会覆盖标签的内容。我需要设置标签的宽度,使其始终与其中的文字一样大。问题是,在设置我的约束的地方,我无法访问标签内的文本。有没有办法让标签始终与您的内容一样大? –

0

你尝试在您的UILabel增加宽度> = 0的约束:@"bsyLeftLabel(>=0)",使之适应它的内容?

+0

是的。该标签已正确调整大小。 –

0

设置bsyLeftLabel的内容抱死为比的bsyRightGenericTextField较高,因此标签将是“拥抱”,围绕它的内容,则文本字段将自动扩展到空间的其余部分:

[self.bsyLeftLabel setContentHuggingPriority:NSLayoutPriorityRequired 
         forOrientation:NSLayoutConstraintOrientationHorizontal];