gpt4 book ai didi

iphone - 大小与字体 :constrainedToSize:lineBreakMode: not accurate?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:52 24 4
gpt4 key购买 nike

sizeWithFont:constrainedToSize:lineBreakMode: 似乎没有返回正确的宽度。执行这些代码后,我看到标签中的部分字符串被截断了,这意味着我必须手动添加几个像素的大小。我错过了什么吗?

我有一个 UILabel:

theLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, LABELWIDTH, LABELHEIGHT)];
theLabel.lineBreakMode = UILineBreakModeWordWrap;
theLabel.numberOfLines = 0;
[theLabel setFont:[UIFont fontWithName:@"MarkerFelt-Wide" size:16]];
theLabel.textColor = [UIColor blackColor];
theLabel.textAlignment = UITextAlignmentLeft;
theLabel.backgroundColor = [UIColor clearColor];

我尝试使用以下代码以编程方式修改标签的大小:

CGSize maximumLabelSize = CGSizeMake(LABELWIDTH, 10000);

CGSize expectedLabelSize = [someString sizeWithFont:theLabel.font constrainedToSize:maximumLabelSize lineBreakMode:theLabel.lineBreakMode];

theLabel.text = someString;

CGRect newFrame = theLabel.frame;
newFrame.size.height = expectedLabelSize.height;
newFrame.size.width = newFrame.size.width+50;
theLabel.frame = newFrame;

最佳答案

好的,首先我要说的是,有一些非常有用的方法可以处理您目前没有使用的框架。例如,您的代码,

CGRect newFrame = theLabel.frame;
newFrame.size.height = expectedLabelSize.height;
newFrame.size.width = newFrame.size.width+50;
theLabel.frame = newFrame;

可以用 CGGeometry 中的函数重写,

CGFloat widthOffset = 50.0f;
theLabel.frame = CGRectOffset(CGRectInset(theLabel.frame, widthOffset, 0.0f), widthOffset / 2.0f, 0.0f);

但是,如果您的代码按预期工作,则根本不需要这样做。你可以走两条路,

[theLabel sizeToFit];

或者,这也应该有效,

theLabel.frame = CGRectMake(theLabel.frame.origin.x, theLabel.frame.origin.y, expectedLabelSize.width, expectedLabelSize.height);

在您之前的代码中,您没有更改 theLabel 的宽度以匹配预期的宽度。请注意,您编写了 newFrame.size.width = newFrame.size.width+50,它应该是 newFrame.size.width = expectedLabelSize.width

关于iphone - 大小与字体 :constrainedToSize:lineBreakMode: not accurate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com