【问题标题】:lineBreakMode: unrecognised selector exception in MonoTouch when setting ParagraphStylelineBreakMode:设置 ParagraphStyle 时 MonoTouch 中无法识别的选择器异常
【发布时间】:2013-10-15 11:53:39
【问题描述】:

主题说明了一切,所以我会在显示代码后发表评论:

        var attr = new CTStringAttributes ();
        attr.Font = new CTFont("Parangon110C", 11);

        var paragraph = new CTParagraphStyleSettings ();
        paragraph.Alignment = CTTextAlignment.Justified;
        attr.ParagraphStyle = new CTParagraphStyle(paragraph);

        DescLabel.AttributedText = new NSAttributedString(billboard.Desc, attr);

所以在运行这段代码后我得到一个异常

Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: -[__NSCFType lineBreakMode]: unrecognized selector sent to instance 0xe5a4db0

我发现它只在我设置 attr.ParagraphStyle 时出现。但是当它为空时,一切都很好(除了我无法以我的方式格式化文本,哈哈)。 执行字符串后

DescLabel.AttributedText = new NSAttributedString(billboard.Desc, attr);

调试器在 DescLabel.AttributedText 的 Size 属性中显示异常文本。

我怀疑,这是 CTStringAttributes 或 CTParagraphStyle 中的错误。 我在那里找到了CoreText repository,但直到现在还不能说是哪里出了问题

另外,不久之后,我发现了一个bugreport,有人抱怨他的东西不起作用。但是在纠正了代码中的一个明显错误之后(幸运的家伙),他不再发表评论了,所以结论是:他得到了这个工作。 但他的代码和我的很相似..

请帮助我解决此问题或找到解决方法。 (UIParagraphStyle 也不起作用,它说 UIParagraphStyleSettings.LineBreakMode 设置器没有实现)

【问题讨论】:

  • 您指向的来源是用于 mac,而不是 monotouch,但这不是很重要。

标签: c# xamarin.ios mono xamarin


【解决方案1】:

显然,从 IOS 6 及更高版本开始,您必须为此使用 UIKits NSParagraphStyle 而不是 CoreText CTParagraphStyle

var parstyle = new MonoTouch.UIKit.NSMutableParagraphStyle ();
parstyle.Alignment = MonoTouch.UIKit.UITextAlignment.Justified;
var att = new NSMutableAttributedString (billboard.Desc);
att.AddAttribute (
    MonoTouch.UIKit.UIStringAttributeKey.ParagraphStyle,
    parstyle,
    new NSRange (0, att.Length)
);
att.AddAttribute (
    MonoTouch.UIKit.UIStringAttributeKey.Font,
    MonoTouch.UIKit.UIFont.FromName ("Parangon110C", 11),
    new NSRange (0, att.Length)
    );
DescLabel.AttributedText = att;

还有一个方便的构造函数供 NSAttributedString 执行此操作:

var parstyle = new MonoTouch.UIKit.NSMutableParagraphStyle ();
parstyle.Alignment = MonoTouch.UIKit.UITextAlignment.Justified;

DescLabel.AttributedText = new NSAttributedString (
                str: billboard.Desc,
                font: MonoTouch.UIKit.UIFont.FromName ("Parangon110C", 11),
                paragraphStyle: parstyle);

【讨论】:

  • 好的,谢谢,我最终想出了这个代码,因为自动补全使用这种最好的方式工作,而且它更符合我的口味: NSMutableParagraphStyle parstyle = new NSMutableParagraphStyle (); parstyle.Alignment = UITextAlignment.Center; attr.ParagraphStyle = parstyle; DescLabel.AttributedText = new NSAttributedString(billboard.Desc, attr);我在抱怨错误that was confirmed 后这样做了。我会将您的评论标记为答案,以防人们遇到同样的问题。干杯!
  • 我希望无论如何都能记录这个问题。实际上,我现在可以使用它的事实并没有让我明白这一点。合理的对齐是行不通的。左,右,中心正在工作。但文字根本不合理。可能是苹果在使用这个词时有自己的意思..(抱歉不能点赞您的评论,声誉太低了^^)
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多