gpt4 book ai didi

ios - 如何使用 MonoTouch 有效地呈现伪 HTML?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:32 26 4
gpt4 key购买 nike

我需要绘制一个标签,其中有一些粗体字,由几个具有不同填充的段落组成,并且可能包含资源中的小内联图像(例如图标和项目符号)。

我知道我可以使用 NSAttributedString对于粗体和斜体,但它不支持段落边距或行限制,我宁愿使用类似 HTML/CSS 的解决方案,因为我是从服务器获取样式的。它还不允许我在文本中插入我的自定义图像,而无需使用自定义字体将它们包装起来。

最后,出于性能原因,我不想使用UIWebView
我可以使用哪些 MonoTouch 库或绑定(bind)来实现此目的?

最佳答案

我很高兴地发现 Hulu 工程师编写了一个 iOS 库来实现这一点。它叫做GSFancyText .

In their own words :

Of course we considered other options such as directly using HTML in a UIWebView or using NSAttributedString. But we decided to make our own style/markup parsing and rich-text drawing system, because of the following advantages:

  • It’s faster and consumes less memory than UIWebViews.
  • We can reuse the styles and parsing results in many places.
  • We can easily modify the style or text of a small part of a paragraph.
  • We can potentially extend the system with more fancy features, like Quartz 2D features, animations, gestures, etc.
  • It makes localization simple. For example, a phrase marked as bold might be at a different position in the sentence in Japanese. In this case we can use a single NSLocalizableString to represent a sentence with various styles.
  • It’s easy to extract the plain text, on which we can enable the VoiceOver support.

图书馆很棒,所以我们开始创建 MonoTouch bindings for it .

例子

首先使用类似 CSS 的字符串定义样式:

var stylesheet = @"
.green { color: #00ff00; font-weight:bold }
.gray { color: gray; font-weight:bold }
";

GSFancyText.ParseStyleAndSetGlobal (stylesheet);

然后创建一个GSFancyText带有标记字符串的对象:

var fancyText = new GSFancyText ("<span class=green>Hulu</span> <span class=gray>Plus</span>");

然后你可以直接在自定义 View 中绘制:

fancyText.drawInRect (rect);

或者创建一个 GSFancyTextView 对象来显示它

var fancyView = new GSFancyTextView (frame, fancyText);

您可以在 GSFancyTextView documentation 中找到更多示例.

我最喜欢的功能是 lambda block ,它允许您指定要调用的委托(delegate)来呈现 <lambda id=yourhandler width=50 height=50>伪元素。

这允许您插入自定义图像或自己进行高级内联绘图。

关于ios - 如何使用 MonoTouch 有效地呈现伪 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14571977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com