iOS:如何显示一盒'tappable tags'
iOS: How to display a box of 'tappable tags'
我的用例是这样的:
用户定义了一些标签(文本如“#asdf”、“#qwerty”、“#let_me_think_about_it”和“#decide later”)。我想在不滚动的情况下在框中显示这些(并且不知道在我显示框之前用户创建了多少标签)。
框本身根本不应滚动,而应显示在 UITableViewCell(正在滚动)中。因此它必须计算建议的高度并响应自动布局机制。如果 (ARM) Mac 用户将 window 的大小调整为比以前更小(或 iOS 用户旋转设备),则该框应根据需要 increase/decrease 其高度(在自动布局的范围内,因为我知道一些问题)。每个标签都应该同时(取消)选择(附加了 UITapGestureRegognizer 的 UILabel?)并且能够显示 'selected'(通过背景视图)。
因此,该框应主要尝试将所有内容水平对齐。如果没有足够的水平space,做一个“换行”并继续下一个“线”。
我当前的解决方案是用户可以水平滚动并点击任何 (UILabel) 视图的 UIScrollView。显示的视图本身是从 NIB 文件加载的,就像 UITableView 一样。这里的问题是第一眼可能看不到任何选定的标签。
如果没有自动布局,我会完全知道该怎么做。但既然有了它,我想在我的 NIB 文件中使用自动布局,想知道你会怎么做?
(您如何计算此类视图所需的宽度并决定何时进行换行(以及如何进行?))
我想我需要一个简单的提示。但如果需要代码解释,ObjC和Swift都可以。 :-)
So, the box should primary try to align all content horizontal. If There's not enough horizontal space, do a "line break" and continue on the next "line".
这听起来像是 UICollectionView
with UICollectionViewFlowLayout
. You can disable scrolling, and the layout object will tell you the size of the content 的工作,因此您可以调整框的大小。
(How do you compute the required width of such a view and decide when a line break is to be done (and how?))
如果你自己做,你把第一行的所有项目的宽度加起来,如果它大于可用的space,你移动超出限制的项目并任何后续项目到下一行。根据需要重复。但这正是流式布局为集合视图所做的,因此无需自己动手。
我的用例是这样的:
用户定义了一些标签(文本如“#asdf”、“#qwerty”、“#let_me_think_about_it”和“#decide later”)。我想在不滚动的情况下在框中显示这些(并且不知道在我显示框之前用户创建了多少标签)。
框本身根本不应滚动,而应显示在 UITableViewCell(正在滚动)中。因此它必须计算建议的高度并响应自动布局机制。如果 (ARM) Mac 用户将 window 的大小调整为比以前更小(或 iOS 用户旋转设备),则该框应根据需要 increase/decrease 其高度(在自动布局的范围内,因为我知道一些问题)。每个标签都应该同时(取消)选择(附加了 UITapGestureRegognizer 的 UILabel?)并且能够显示 'selected'(通过背景视图)。
因此,该框应主要尝试将所有内容水平对齐。如果没有足够的水平space,做一个“换行”并继续下一个“线”。
我当前的解决方案是用户可以水平滚动并点击任何 (UILabel) 视图的 UIScrollView。显示的视图本身是从 NIB 文件加载的,就像 UITableView 一样。这里的问题是第一眼可能看不到任何选定的标签。
如果没有自动布局,我会完全知道该怎么做。但既然有了它,我想在我的 NIB 文件中使用自动布局,想知道你会怎么做?
(您如何计算此类视图所需的宽度并决定何时进行换行(以及如何进行?))
我想我需要一个简单的提示。但如果需要代码解释,ObjC和Swift都可以。 :-)
So, the box should primary try to align all content horizontal. If There's not enough horizontal space, do a "line break" and continue on the next "line".
这听起来像是 UICollectionView
with UICollectionViewFlowLayout
. You can disable scrolling, and the layout object will tell you the size of the content 的工作,因此您可以调整框的大小。
(How do you compute the required width of such a view and decide when a line break is to be done (and how?))
如果你自己做,你把第一行的所有项目的宽度加起来,如果它大于可用的space,你移动超出限制的项目并任何后续项目到下一行。根据需要重复。但这正是流式布局为集合视图所做的,因此无需自己动手。