gpt4 book ai didi

ios - 无论使用什么字符串,sizewithfont 始终返回相同的值

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

我想根据文本计算tableviewcell 的高度。我正在使用

CGSize userInputSize = [userLabel sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] forWidth:[tableView frame].size.width-10 lineBreakMode:NSLineBreakByWordWrapping]  

但不知何故,返回值始终为 22(字体大小)。奇怪的是,当我使用

CGSize userInputSize = [userLabel sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];

一切正常。但我更喜欢第一个版本,这样我可以轻松调整宽度。为什么它不起作用?

编辑:对于错误的名称约定感到抱歉,但 userLabel 是 NSString 而不是标签

最佳答案

sizeWithFont 是一个 NSString 方法(UIKit 添加)。使用:

CGSize userInputSize = [userLabel.text sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f] constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];

CGSize userInputSize = [userLabel.text sizeWithFont:userLabel.font constrainedToSize:[tableView frame].size lineBreakMode:NSLineBreakByWordWrapping];

参见 NSString UIKit Additions Reference .

编辑:

我刚刚试过这段代码:

NSLog (@"test: %@", NSStringFromCGSize([@"test" sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f]]));
NSLog (@"longer test: %@", NSStringFromCGSize([@"longer test" sizeWithFont:[UIFont fontWithName:@"Arial" size:18.0f]]));

结果是:

test: {30, 22}
longer test: {85, 22}

CGSize 是一个struct:

struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;

所以您可能正在查看 size.height 而不是 size.width

编辑 2:

来自文档 sizeWithFont:forWidth:lineBreakMode:

If the size of the string exceeds the given width, this method truncates the text (for layout purposes only) using the specified line break mode until it does conform to the maximum width; it then returns the size of the resulting truncated string.

所以你最好定义一个最大尺寸(真正的 width 和一个大的 height)并使用:

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(UILineBreakMode)lineBreakMode

请参阅this answer .

关于ios - 无论使用什么字符串,sizewithfont 始终返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13304823/

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