我一直很好奇Instagram如何获得流畅的布局标签,并想知道这个功能背后的原因是什么?对我来说,似乎他们正在使用UIButton并且只是逐行计算按钮的位置?是对的吗?或者是否有一种更简单的方法可以在不必手动计算每个标记的位置的情况下逐行/或并排,因为多个标记的宽度适合在一起?
或者,他们使用的是NSAttributedStrings吗?
有什么想法吗?
这是我所指的布局的一个例子。
答案 0 :(得分:1)
好吧,我目前正在使用NSAttributedString
和UITextView
来完成所有这些工作,而我目前的代码可以做到。所以我将解释这样做的可能版本。
以下是iOS7的提示和重要步骤:
{0}在iOS7中有一个新属性:NSAttributedString
。您可以将其添加到NSLinkAttributeName
,并使用检测方法(组合:how to make #key and @key clickable in IOS7和Get word from tap in UITextView)进行管理。这是一般的做法。对于以前的版本,你将不得不做更多的工作,但保持这个一般的想法
但是,因为它只针对主题标签,因为你可以检测到水龙头背后的世界,你可以这样做:检测已点击的单词(参见前面的链接),检测这个单词是否有标签,如果是,你可以做无论你想做什么动作。您可以使用NSAttributedString
来了解标签的位置,并知道何时“着色”它们。
答案 1 :(得分:0)
这是使用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演示