首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSMutableParagraphStyle在台式机中使用uilabel(对齐异常)的自动高度

NSMutableParagraphStyle在台式机中使用uilabel(对齐异常)的自动高度
EN

Stack Overflow用户
提问于 2014-02-08 09:32:50
回答 2查看 666关注 0票数 2

在tableview重新加载后崩溃

这个问题只发生在iOS6上,iOS7很好。

例外说明:

NSTextAlignmentJustified和NSTextAlignmentNatural在绘制NSString (null)时是无效的对齐值(

0 CoreFoundation 0x00a702e exceptionPreprocess + 206

1 libobjc.A.dylib 0x03152e7e objc_exception_throw + 44

2 CoreFoundation 0x00aa6deb +NSException引发:格式:+ 139

_drawInRect:withFont:lineBreakMode:alignment:lineSpacing:includeEmoji:truncationRect:+ 88 3 UIKit 0x022ea8ec -NSString(UIStringDrawing)

drawInRect:withFont:lineBreakMode:alignment:lineSpacing:includeEmoji:+ 99 4 UIKit 0x022ea88f -NSString(UIStringDrawing)

drawInRect:withFont:lineBreakMode:alignment:lineSpacing:+ 91 5 UIKit 0x022e827 -NSString(UIStringDrawing)

_legacy_drawTextInRect:baselineCalculationOnly:+3433 6 UIKit 0x0241ce73 -UILabel

7 UIKit 0x0241cf76 -UILabel _drawTextInRect:baselineCalculationOnly:+ 160

8 UIKit 0x0241bcd9 -UILabel drawTextInRect:+ 548

9 UIKit 0x0241e098 -UILabel drawRect:+ 98

10 UIKit 0x0230fe6e (CALayerDelegate)拖曳层:inContext:+ 504

11 QuartzCore 0x0340ba3f -CALayer drawInContext:+ 128

12 QuartzCore 0x0340b96b _ZL16backing_callbackP9CGContextPv + 96

13 QuartzCore 0x0331d723 CABackingStoreUpdate_ + 2703

14 QuartzCore 0x0340b83c _ZN2CA5Layer8display_Ev + 1406

15 QuartzCore 0x0340b9ba -CALayer _display + 33

16 QuartzCore 0x0340b2b6 _ZN2CA5Layer7displayEv + 152

17 QuartzCore 0x0340b994 -CALayer显示器+ 33

_ZN2CA5Layer17display_if_neededEPNS_11TransactionE +328 18 QuartzCore 0x034000e2

_ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 38 19 QuartzCore 0x0340015c

_ZN2CA7Context18commit_transactionEPNS_11TransactionE +324 20 QuartzCore 0x0337e0bc

21 QuartzCore 0x0337f227 _ZN2CA11Transaction6commitEv + 395

_ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 96 22 QuartzCore 0x0337f8e2

__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 30 23 CoreFoundation 0x00a6fafe

24 CoreFoundation 0x00a6fa3d __CFRunLoopDoObservers + 381

25 CoreFoundation 0x00a4d7c2 __CFRunLoopRun + 1106

26 CoreFoundation 0x00a4cf44 CFRunLoopRunSpecific + 276

27 CoreFoundation 0x00a4ce1b CFRunLoopRunInMode + 123

28 GraphicsServices 0x044bc7e3 GSEventRunModal + 88

29 GraphicsServices 0x044bc668 GSEventRun + 104

30 UIKit 0x022 UIKit+ 1211

31 DirectSeller 0x0000548 d main + 141

32 libdyld.dylib 0x03a2470d start +1)

我从未将对齐设置为"NSTextAlignmentJustified“或"NSTextAlignmentNatural".i无法理解。

自动高度代码:

dequeueReusableCellWithIdentifier:@"BasicCell";DSBasicInfoPrototypeCell *cell = tableView NSString *titleText = data@"title";

代码语言:javascript
复制
    NSMutableAttributedString *titleAttributedText = [[NSMutableAttributedString alloc] initWithString:titleText];
    NSMutableParagraphStyle *titleParagraphStyle = [[NSMutableParagraphStyle alloc] init];
    [titleParagraphStyle setLineSpacing:3.0f];
    titleParagraphStyle.alignment = NSTextAlignmentLeft;
    [titleAttributedText addAttribute:NSParagraphStyleAttributeName value:titleParagraphStyle range:NSMakeRange(0, titleText.length)];
    cell.titleLabel.attributedText = titleAttributedText;

    cell.titleLabel.preferredMaxLayoutWidth = 280;
    [cell.titleLabel setText:data[@"title"]];
    [cell.leftSubtitleLabel setText:data[@"source"]];
    [cell.rightSubtitleLabel setText:data[@"time"]];

    [cell setNeedsUpdateConstraints];
    [cell updateConstraintsIfNeeded];
    [cell.contentView setNeedsLayout];
    [cell.contentView layoutIfNeeded];

    return [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;

最后,为我糟糕的英语道歉。

EN

回答 2

Stack Overflow用户

发布于 2014-05-26 07:30:24

通过为段落指定文本对齐(而不是让它默认),我设法在iOS6上解决了这个问题:

代码语言:javascript
复制
paragraphStyle.alignment = NSTextAlignmentLeft;

希望它也对你有用。

票数 1
EN

Stack Overflow用户

发布于 2014-04-06 17:55:41

我也有同样的问题,但我找不到根本原因。我认为这与在属性文本中使用ParagraphStyle有关。

我的解决办法是检查OS版本,如果小于7.0版本,我将使用标准文本而不是AttributedText。

这不是最好的解决方案,但它至少让我的应用停止在iOS6.1上崩溃,直到我找到更好的解决方案。

代码语言:javascript
复制
    NSString* text = @"Text\nText";

    NSString *ver   = [[UIDevice currentDevice] systemVersion];
    float ver_float = [ver floatValue];
    if (ver_float >= 7.0)
    {            
        NSMutableAttributedString* attributedText = [[NSMutableAttributedString alloc] initWithString:text];
        NSMutableParagraphStyle* paragraphStyle   = [[NSMutableParagraphStyle alloc] init];
        paragraphStyle.paragraphSpacing           = 6.0f;
        [attributedText addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, text.length)];

        [self.descLabel setAttributedText:attributedText];
    }
    else
    {            
        [self.descLabel setText:@"text"];
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21644334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档