我可以NSAttributedString使用转义的换行符(@"\n")创建一个多行.使用iOS 7,我现在可以嵌入一个UIImage内部属性字符串(via NSTextAttachment).
我注意到每当我将attributedTexta 设置为UILabel带有嵌入图像的多行属性字符串时,实际显示的行数与标签的高度成反比.例如,当标签的高度为80时,会出现两条线; 当高度大约为100时,只出现第二条线; 当高度约为130时,什么都没有出现.
尝试将多个UILabel并排放置在a UITableViewCell内并使标签与单元格高度(垂直)增长时发生此问题.
任何人都可以解释为什么会这样吗?有没有人知道不涉及使UILabel变小的解决方法?
示例代码:
@implementation SOViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSMutableAttributedString *text1 = [[NSMutableAttributedString alloc] init];
[text1 appendAttributedString:[[NSAttributedString alloc] initWithString:@"Line 1\n"]];
[text1 appendAttributedString:[[NSAttributedString alloc] initWithString:@"Line 2"]];
UIImage *image = [UIImage imageNamed:@"17x10"]; //some PNG image (17px by 10px)
NSTextAttachment *attachment = [[NSTextAttachment alloc] init];
attachment.image = image;
attachment.bounds = CGRectMake(0, 0, image.size.width, image.size.height);
NSMutableAttributedString *text2 = [[NSMutableAttributedString …Run Code Online (Sandbox Code Playgroud) 我想我在iOS 7模拟器中发现了一个没有出现NSAttributedString的错误.如果其他人可以测试这个以确认它是一个错误,那将是很好的,然后我将向Apple提交一个错误.
问题似乎是NSAttributedString使用NSUnderlineStyleAttributeName和NSParagraphStyleAttributeName的组合.
以下是重现的步骤:
1)在Xcode 5中创建一个新的"单视图应用程序".什么都叫它.
2)在ViewController.m中,将viewDidLoad方法替换为:
- (void)viewDidLoad
{
[super viewDidLoad];
NSMutableParagraphStyle* paragraph = [[NSMutableParagraphStyle alloc] init];
paragraph.alignment = NSTextAlignmentCenter;
NSAttributedString* attrStr = [[NSAttributedString alloc] initWithString:@"Lorem ipsum dolor sit" attributes:
@{NSUnderlineStyleAttributeName:@1,
NSParagraphStyleAttributeName:paragraph}];
UILabel* myLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 0, 0)];
myLabel.backgroundColor = [UIColor greenColor];
myLabel.attributedText = attrStr;
[myLabel sizeToFit];
[self.view addSubview:myLabel];
}
Run Code Online (Sandbox Code Playgroud)
3)在iOS 7设备上运行,然后在iOS 7模拟器中再次运行它.
4)最后,将部署目标设置为iOS 6并在iOS 6模拟器上运行它.
结果应如下
截图:
iOS7设备
iOS7模拟器
