The actual Font used for the purpose described by a text style can vary based on a number of dynamic consIDerations,including the user’s content size category preference,which is represented by the UIApplication property preferredContentSizecategory.
我注意到属性preferredContentSizecategory响应于设置中的文本大小而改变.
It’s also important to observe the UIContentSizecategoryDIDChangeNotification so that you can re-layout the text when the user changes the content size category. When your app receives that notification,it should send the invalIDateIntrinsicContentSize message to vIEws positioned by auto Layout or send setNeedsLayout to user interface elements positioned manually. And it should invalIDate preferred Fonts or Font descriptors and acquire new ones as needed.
所以,我的想法是观察适当的通知,根据preferredContentSizecategory属性计算大小增量,并将增量应用于文本视图的默认字体大小(以IB或编程方式设置).
PreferredFontLabel.h
@interface PreferredFontLabel : UILabel@property (nonatomic) UIFontDescriptor *defaultFontDescriptor;@end
PreferredFontLabel.m
#import "PreferredFontLabel.h"#import "UIApplication+ContentSize.h"@implementation PreferredFontLabel- (ID)init{ self = [super init]; if (self) { [self setup]; } return self;}- (ID)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { [self setup]; } return self;}- (ID)initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder:aDecoder]; if (self) { [self setup]; } return self;}- (voID)setup{ self.defaultFontDescriptor = self.Font.FontDescriptor; [[NSNotificationCenter defaultCenter] addobserver:self selector:@selector(contentSizecategoryDIDChange) name:UIContentSizecategoryDIDChangeNotification object:nil]; [self contentSizecategoryDIDChange];}- (voID)setDefaultFontDescriptor:(UIFontDescriptor *)defaultFontDescriptor{ _defaultFontDescriptor = defaultFontDescriptor; [self contentSizecategoryDIDChange];}- (voID)contentSizecategoryDIDChange{ CGfloat preferredSize = [self.defaultFontDescriptor.FontAttributes[UIFontDescriptorSizeAttribute] floatValue]; preferredSize += [UIApplication sharedApplication].contentSizeDelta; self.Font = [UIFont FontWithDescriptor:self.defaultFontDescriptor size:preferredSize]; [self invalIDateIntrinsicContentSize];}- (voID)dealloc{ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIContentSizecategoryDIDChangeNotification object:nil];}@end
UIApplication ContentSize.h
@interface UIApplication (ContentSize)@property (nonatomic,Readonly) NSInteger contentSizeDelta;@end
UIApplication ContentSize.m
#import "UIApplication+ContentSize.h"@implementation UIApplication (ContentSize)- (NSInteger)contentSizeDelta{ static NSArray *contentSizeCategorIEs; static dispatch_once_t oncetoken; dispatch_once(&oncetoken,^{ contentSizeCategorIEs = @[UIContentSizecategoryExtraSmall,UIContentSizecategorySmall,UIContentSizecategoryMedium,UIContentSizecategoryLarge,UIContentSizecategoryExtraLarge,UIContentSizecategoryExtraExtraLarge,UIContentSizecategoryExtraExtraExtraLarge UIContentSizecategoryAccessibilityMedium,UIContentSizecategoryAccessibilityLarge,UIContentSizecategoryAccessibilityExtraLarge,UIContentSizecategoryAccessibilityExtraExtraLarge,UIContentSizecategoryAccessibilityExtraExtraExtraLarge]; }); // assume UIContentSizecategoryLarge is default category NSInteger contentSizeDelta = [contentSizeCategorIEs indexOfObject:self.preferredContentSizecategory]; if(contentSizeDelta != NSNotFound) { contentSizeDelta -= [contentSizeCategorIEs indexOfObject:UIContentSizecategoryLarge]; return contentSizeDelta; } else { return 0; }}@end
我添加了归因字符串支持,演示可在GitHub
总结以上是内存溢出为你收集整理的iOS7:我们可以使用除Helvetica Neue字体以外的动态类型吗?全部内容,希望文章能够帮你解决iOS7:我们可以使用除Helvetica Neue字体以外的动态类型吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)