- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
sizeWithFont: ConstrainedToSize: lineBreakMode: 方法在 iOS 7 中已弃用,我有点不确定如何准确处理这个问题。在互联网上做了一些研究后,我发现有一种新的方法可以处理这个问题,即:
[txt drawWithRect: options: attributes: context:]
这是我目前正在尝试运行的方法:
+ (CGSize)textSizeForText:(NSString *)txt
{
CGFloat width = [UIScreen mainScreen].applicationFrame.size.width * 0.75f;
CGFloat height = MAX([JSBubbleView numberOfLinesForMessage:txt],
[txt numberOfLines]) * [JSMessageInputView textViewLineHeight];
return [txt sizeWithFont:[JSBubbleView font]
constrainedToSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
lineBreakMode:NSLineBreakByWordWrapping];
}
但我很难将其转换为新方法。主要是 lineBreakMode: 新方法中没有。有任何想法吗?
最佳答案
在新方法中,对于换行,你必须先创建一个 NSMutableParagraphStyle Style:
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;
然后通过传递所有必要的参数来简单地使用新方法
CGRect textRect = [text boundingRectWithSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSParagraphStyleAttributeName: paragraphStyle.copy}
context:nil];
return textRect.size;
如果你想让这成为潮流,你可以做到
return ([text boundingRectWithSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSParagraphStyleAttributeName: paragraphStyle.copy}
context:nil]).size;
希望对你有帮助
我将在上面的答案中添加字体属性
return ([text boundingRectWithSize:CGSizeMake(width - kJSAvatarSize, height + kJSAvatarSize)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSParagraphStyleAttributeName: paragraphStyle.copy, NSFontAttributeName:[UIFont fontWithName:@"HelveticaNeue" size:14]}
context:nil]).size;
关于ios - 大小与字体 : ConstrainedToSize: lineBreakMode: method is deprecated in iOS 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21654671/
我正在尝试使用sizeWithFont,如下所示: [commentTextLabel.text sizeWithFont:commentTextLabel.font
我在sizeWithFont(特别是lineBreakMode)上遇到了一些麻烦。 CGSize maxSize = CGSizeMake(30, 999); UIFont *font = [UIFo
我正在 iPhone 上制作聊天应用程序。我对 sizeWithFont:constrainedToSize:lineBreakMode 函数有疑问。当 NSString 有 long length
尝试创建 CGSize 来设置 UILabel 的正确高度时出现泄漏。在 heightForRowAtIndexPath 中设置高度时,我也收到相同的泄漏。 这是泄漏的代码片段: CGSize siz
所以我刚刚浏览了一个旧的 iOS 项目,下面一行说它已弃用: CGSize stringSize = [string sizeWithFont:self.stringLabel.font constr
我有以下代码: float height = [string sizeWithFont:[UIFont systemFontOfSize:kFontSize] constrainedToSize:CG
sizeWithFont:constrainedToSize:lineBreakMode: 似乎没有返回正确的宽度。执行这些代码后,我看到标签中的部分字符串被截断了,这意味着我必须手动添加几个像素的大
不要与返回 CGSize 的 NSString sizeWithFont 方法混淆,我正在寻找的是返回 NSString 的方法> 受限于某个 CGSize。我想要这样做的原因是当使用 Core Te
我正在将我的应用程序更新到iOS 7,终于得到了它,但是有一件事我找不到解决方案。 在Xcode 4中,我使用了以下方法: #define FONT_SIZE 14.0f #define CELL_C
我已经阅读了很多关于该主题的问题,但我似乎无法找到我的代码有什么问题: UILabel *nameLabel = [[UILabel alloc] init]; [nameLabel setText:
在 Xcode 5 上将项目从 iOS5.0 转换为 iOS7/iOS6。下面的代码给出了编译时警告: 'sizeWithFont:constrainedToSize:lineBreakMode:'已
我正在尝试制作一个 UITableViewCell,根据它显示的字符串的长度来调整其高度,但我对此方法很感兴趣。 这是我得到的: NSString *text = @"A really long st
AppKit(适用于 Mac OS X 上的 Cocoa)中是否有任何等效方法与 UIKit 的 [NSString sizeWithFont:constrainedToSize:] 执行相同的操作?
我已经浏览了 SO 上关于此方法的每一篇文章的感觉。许多海报的答案都是设置一个非常大的值作为高度约束。 但是,对我来说这不起作用。这是我的代码: //Create the contentLabel L
我有一个字幕样式 UITableViewCell,其高度根据每个字段的文本长度动态变化。问题是,如果标签有多行,textLabel 的高度(CGSize 大小)不会增加。 奇怪的是,detailTex
当我运行以下代码时(iOS 6.1 SDK): UIFont *font = [UIFont fontWithName:@"Avenir" size:12.0]; NSString *text1 =
在 iOS 7 中,方法: - (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lin
UILabel 位于 UITableViewCell 内。点击单元格时,高度会扩展,并且会出现第二个 UILabel,其中包含不同数量的数据。 问题是,如果换行,sizeWithFont:constr
我怎样才能转换 CGSize labelHeighSize = [text sizeWithFont: [UIFont systemFontOfSize:16] constrainedToSize:
这个问题在这里已经有了答案: Replacement for deprecated -sizeWithFont:constrainedToSize:lineBreakMode: in iOS 7?
我是一名优秀的程序员,十分优秀!