Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NSAttributeString忽略UILabel(iOS 6)的自动收缩和numberOfLines_Ios_Iphone_Objective C_Uilabel_Nsattributedstring - Fatal编程技术网

NSAttributeString忽略UILabel(iOS 6)的自动收缩和numberOfLines

NSAttributeString忽略UILabel(iOS 6)的自动收缩和numberOfLines,ios,iphone,objective-c,uilabel,nsattributedstring,Ios,Iphone,Objective C,Uilabel,Nsattributedstring,我和你有联系 行数=2 系统字体大小=15 最小字体大小=8 断线模式-截尾 当我为UILabel设置具有NSString类型的长文本时,它工作正常,并显示多行文本(如果需要,可以缩放)。 当我试图设置NSAttributedString类型的文本时,它会忽略最小字体大小和自动收缩,因此我看到的是具有最大字体大小的单行文本 有可能解决这个问题吗 看起来像这样(标签大小为常量) minimumFontSize从iOS6开始就不推荐使用。此外,仅当numberOfLines设置为1时,adjusts

我和你有联系 行数=2 系统字体大小=15 最小字体大小=8 断线模式-截尾

当我为UILabel设置具有NSString类型的长文本时,它工作正常,并显示多行文本(如果需要,可以缩放)。 当我试图设置NSAttributedString类型的文本时,它会忽略最小字体大小和自动收缩,因此我看到的是具有最大字体大小的单行文本

有可能解决这个问题吗

看起来像这样(标签大小为常量)


minimumFontSize
从iOS6开始就不推荐使用。此外,仅当
numberOfLines
设置为1时,adjustsFontSizeToFitWidth才起作用。UILabel不会跨多行调整文本大小,因为在收缩字体时处理换行符存在歧义

使用
minimumScaleFactor
设置文本应缩放的最小大小

下面的代码将使用字体大小为20的属性字符串填充
UILabel
,并将其缩小一半,使其最小大小为10

self.label.lineBreakMode = NSLineBreakByTruncatingTail;
NSMutableAttributedString *hogan = [[NSMutableAttributedString alloc] initWithString:@"Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan! Presenting the great... Hulk Hogan!"];
[hogan addAttribute:NSFontAttributeName
              value:[UIFont systemFontOfSize:20.0]
              range:NSMakeRange(0, [hogan length])];
[self.label setAttributedText:hogan];
self.label.adjustsFontSizeToFitWidth = YES;
self.label.numberOfLines = 1;
self.label.minimumScaleFactor = 0.5;

我找到了这样做的方法:

label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!

仅当在设置属性字符串后设置第三行时,此选项才有效。设置属性字符串时,似乎会覆盖换行行为(除其他外)。

您使用的是Interface Builder,还是以编程方式或两者兼而有之?我正在尝试以编程方式(创建字符串)执行此操作。标签是在interface Buider中创建的当您在interface builder中创建标签时,是在此处设置行数并自动收缩,还是以编程方式设置?我在interface Buider中设置多行的行数是否应为numberOfLines=0?adjustsFontSizeToFitWidth也适用于多行。但是,它不适用于多行中的属性字符串。@KamranKhan如何调整多行的行间距以及最小ScaleFactor?有什么想法吗?如果我将其他nsattributed字符串添加到对齐右侧,则不起作用即使不使用adjustsFontSizeToFitWidth,也只有在设置attributedText后设置lineBreakMode时才起作用。谢谢分享!也可以使用
NSMutableAttributedString
中的属性:首先设置属性字符串;然后添加属性,包括属性字典中最后一个换行模式。@TomSawyer设置。byTruncatingMiddle对我有效,.ByTruncatingTail仍在最后一个位置截断文本end@JulianB不适合我使用[NSAttributeString.DocumentReadingOptionKey.documentType:NSAttributeString.documentType.html]作为NSAttributeString
label.adjustsFontSizeToFitWidth = true
label.attributedText = attributedString
label.lineBreakMode = .ByTruncatingTail // this did the trick!
NSMutableAttributedString *muAtrStr = [[NSMutableAttributedString alloc]initWithString:@"2"];
NSAttributedString *atrStr = [[NSAttributedString alloc]initWithString:@"\ndays" attributes:@{NSFontAttributeName : [UIFont fontWithName:@"HelveticaNeue-Bold" size:8]}];
[muAtrStr appendAttributedString:atrStr];
self.lbl.numberOfLines = 0;
[self.lbl setAttributedText:muAtrStr];