cha*_*bag 10 uilabel text-size sizetofit ios5
在iOS 5上.
我有一个最初放在笔尖中的UILabel元素.我希望x位置保持不变.我希望它采用1行或2行.如果超过两行,则应使用换行符设置来显示省略号.
我用numberOfLines属性和-sizeToFit
如果我将UILabel的numberOfLines属性设置为0,它将正确地看到对于某些文本,没有足够的空间并且在调用之后将其包装到第二行-sizeToFit但是在极少数情况下该行足够长以拉伸到3行,我得到三行,我不想要.如果我将numberOfLines属性设置为2,它实际上将整个东西拉伸到一条线上,并将我在笔尖中设置的初始框架拉长得更宽.
CGRect titleFrame = [[self titleLabel] frame];
[[self titleLabel] setNumberOfLines:0];
[[self titleLabel] setText:newProductTitleText];
[[self titleLabel] sizeToFit];
CGRect newTitleFrame = [[self titleLabel] frame];
Run Code Online (Sandbox Code Playgroud)
CGRect就在那里,我可以在事后计算出事物.因此设置numberOfLines为0有效,并且不会更改框架中的原始origin.x,并且会将长文本分成多行,但不会将其约束为2行.将numberOfLines属性设置为2,当我阅读Apple文档时
此属性控制使用的最大行数,以使标签的文本适合其边界矩形.此属性的默认值为1.要删除任何最大限制,并根据需要使用尽可能多的行,请将此属性的值设置为0.
似乎我应该能够将其设置为两个并仍然有效.我希望sizeToFit在扩展以适应所有文本时在正X和Y方向上扩展,但是当numberOfLines设置为0以外时它在负X方向上扩展.
ETA:"自动调整大小"的struts设置为上部和左侧以将其固定在最小x,y.
感谢您的任何见解.
我遇到了类似的问题,即不尊重我在设置为 2-[UILabel sizeToFit]时设置的最大宽度。以下是我解决该问题的方法:numberOfLines
CGFloat titleMaxWidth = 200;
CGFloat titleMinHeight = 30;
CGFloat titleMaxHeight = 40;
UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 5, titleMaxWidth, titleMaxHeight)]; // alternatively, you could do this in a nib
titleLabel.numberOfLines = 0;
titleLabel.text = @"The title label will be sized appropriately with this technique.";
titleLabel.font = [UIFont boldSystemFontOfSize:16];
[titleLabel sizeToFit];
titleLabel.numberOfLines = 2;
if (titleLabel.height > titleMaxHeight)
{
titleLabel.height = titleMaxHeight;
}
else if (titleLabel.height < titleMinHeight)
{
titleLabel.height = titleMinHeight;
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我还想要标签的最小高度,因为-sizeToFit通常会使标签非常小,但如果您不关心最小高度,则可以忽略该代码。titleMaxHeight 的“神奇数字”40 来自实验并发现使用这种字体的 2 行标签实际上只需要 40px。在这段代码中,-sizeToFit主要用于将文本保持在宽度范围内,并确定当我们有短字符串文本时是否可以减小初始高度40。
| 归档时间: |
|
| 查看次数: |
19010 次 |
| 最近记录: |