我正在更新我的应用程序以支持 iOS 7 中的动态类型。使文本根据系统设置调整其大小相对容易,但是因为我在 UITableView 和具有多个 UILabel 的单元格的上下文中使用它他们,文本大小不是我唯一需要担心的事情。如果文本增长,单元格的高度也应该如此,如果文本缩小,单元格的高度也应该如此。
此外,如果它变得更小,与最大尺寸的类型相比,它显然应该在项目之间具有更小的间距(因为在小尺寸时,它们之间的空间会很大)。
当用户更改其动态类型大小时,如何更改更高级的布局问题?
现在,我正在做一些非常丑陋但几乎无法正常工作的事情。我查看我的一个标签的高度,并用它的大小缩放我的常数。但它非常不精确,因为当前文本大小的 UILabel 高度的 110% 被用作元素之间的填充不一定是普遍适用的。
所以这就是我在那个例子中所做的:
CGRect articleTitleRect = [article.title boundingRectWithSize:CGSizeMake(CGRectGetWidth(self.contentView.bounds) - 29, MAXFLOAT)
options:NSStringDrawingUsesFontLeading
attributes:@{ NSFontAttributeName: [UIFont preferredFontForTextStyle:UIFontTextStyleHeadline] }
context:nil];
self.urlConstant.constant = articleTitleRect.size.height / 5;
self.previewConstant.constant = articleTitleRect.size.height / 5;
(基本上找出标签的高度是多少,然后使用它的百分比来推断间距。同样,非常不精确并且不能普遍适用。)
我考虑做的另一件事是检查当前preferredFontForTextStyle:
在点大小处等于多少,并为特定值硬编码界面调整/间距。这工作得更好一点,但它似乎仍然不是 Apple 所想的最佳选择,因为它不是非常动态的(例如,如果他们添加另一种类型大小,它会中断)而且你几乎在嗅探他们没有的值' t 让你一发不可收拾(这让它看起来很老套)。
那么,诸如 Tweetbot 3(现在使用 Dynamic Type 来设置其 UITableViewCell 元素)之类的应用程序如何使它们的 UI 在不同的 Dynamic Type 大小上看起来如此出色呢?这样做的最佳方法是什么?老实说,似乎没有关于该主题的教程。