我的应用程序中有一个秒表功能,使用居中UILabel的比例间距字体来渲染时间.每次增加标签的宽度都会发生变化,从而产生一种在快速速度下看起来特别糟糕的弹跳效果.这是一个例子.
我怎样才能解决这个问题?
iOS 9更新
它现在是一个单行:
UIFont.monospacedDigitSystemFontOfSize(17, weight: UIFontWeightRegular)
Run Code Online (Sandbox Code Playgroud)
此外,我上次尝试时,下面的解决方案不适用于iOS 9.浪费了相当多的时间调试之前在标题中遇到这个问题.
解
在iOS 7中使用Text Kit变得微不足道.
确保导入Core Text:
#import <CoreText/CoreText.h>
Run Code Online (Sandbox Code Playgroud)
创建一个将比例数转换为等宽数字的设置:
NSArray *monospacedSetting = @[@{UIFontFeatureTypeIdentifierKey: @(kNumberSpacingType),
UIFontFeatureSelectorIdentifierKey: @(kMonospacedNumbersSelector)}];
Run Code Online (Sandbox Code Playgroud)
通过附加当前使用的字体描述符来创建新的字体描述符UILabel:
UIFontDescriptor *newDescriptor = [[timeLabel.font fontDescriptor] fontDescriptorByAddingAttributes:@{UIFontDescriptorFeatureSettingsAttribute: monospacedSetting}];
Run Code Online (Sandbox Code Playgroud)
更新标签的字体:
// Size 0 to use previously set font size
timeLabel.font = [UIFont fontWithDescriptor:newDescriptor size:0];
Run Code Online (Sandbox Code Playgroud) 我正在使用UICollectionViewFlowLayout.我的单元格包含高度不同的UILabel(行数).
似乎获得单元格高度的最佳方法是在子类中UICollectionViewCell,因为这是我设置布局并可以访问我的视图的内在大小的地方,但是:
collectionView: layout: sizeForItemAtIndexPath:在collectionView: cellForItemAtIndexPath:委托方法之前调用,这意味着在获得单元格的实际布局之前,我需要知道单元格高度.
到目前为止,我提出的所有内容似乎都过于复杂,例如从固定单元格高度开始,在单元格加载中的标签之后引用实际高度并再次以正确的高度重新加载数据.有一个更好的方法吗?
我正在为我的应用实现导出/导入功能:
使用自定义文件扩展名导出数据(Backup.appname)→点击邮件或iCloud驱动器中的文件→让我的应用程序在共享表中显示为"使用AppName导入".
我在我的应用程序的plist中添加了一个自定义UTI和文档类型,如此处所述.一切都按预期工作,除了我的应用程序显示为"复制到AppName",而不是"使用AppName导入".
如何将其显示为"使用AppName导入"?我见过其他应用程序有自己的自定义文件类型.