我一直很好奇 instagram 如何使其标签布局流畅,并想知道这个功能背后的原因是什么?对我来说,似乎他们正在使用 UIButton 并且只是逐行计算按钮的位置?是对的吗?或者是否有一种更简单的方法可以做到这一点,而不必手动计算每个标签的位置逐行/或并排,因为多个标签的宽度适合在一起?
或者,他们是否使用 NSAttributedStrings?
有任何想法吗?
这是我所指的布局示例。
我一直很好奇 instagram 如何使其标签布局流畅,并想知道这个功能背后的原因是什么?对我来说,似乎他们正在使用 UIButton 并且只是逐行计算按钮的位置?是对的吗?或者是否有一种更简单的方法可以做到这一点,而不必手动计算每个标签的位置逐行/或并排,因为多个标签的宽度适合在一起?
或者,他们是否使用 NSAttributedStrings?
有任何想法吗?
这是我所指的布局示例。
好吧,我目前正在努力NSAttributedString
并使UITextView
所有这些工作正常进行,而我当前的代码可以做到这一点。所以我将解释这样做的可能版本。
下面是小窍门和大步骤,用 iOS7:
NSAttributedString
,在 iOS7 中有一个新的属性 : NSLinkAttributeName
。您可以将它添加到您的NSAttributedString
, 并使用检测方法(结合:如何在 IOS7 中使 #key 和 @key 可点击以及从 UITextView 中的点击获取单词)您可以管理它。这是一般的做法。对于以前的版本,您将不得不做更多的工作,但要保持这个总体思路。
但是因为,它只适用于主题标签,因为您可以检测点击背后的世界,您可以这样做:检测已点击的单词(请参阅之前的链接),检测该单词是否有标签,如果是,您可以这样做你想要的任何动作。您可以使用 aNSRegularExpression
来了解主题标签的位置,并知道何时为它们“着色”。
这是使用 UITextView 和 NSAttributedString 的简化方法:
如何在 iOS7 中的位置获取字符索引:
- (NSUInteger) getCharIndexAt: (CGPoint) location
{
NSLayoutManager *layoutManager = self.layoutManager;
NSUInteger characterIndex = NSNotFound;
characterIndex = [layoutManager characterIndexForPoint:location inTextContainer:self.textContainer fractionOfDistanceBetweenInsertionPoints:NULL];
return characterIndex;
}
另请查看 WWDC 2013 对 TextKit 演示的介绍