| 测试已测试 | ✓ |
| 语言语言 | Obj-CObjective C |
| 许可证 | MIT |
| 发布最后发布 | 2017年1月 |
由 Jonathan Hersh 和 Samuel Giddins 维护。
iOS 7 的 UIFontDescriptor 很棒。动态文本也能响应用户在 Settings.app 中指定的首选文本大小。
不过,+[UIFont preferredFontForTextStyle:] 只能在系统字体 Helvetica Neue (iOS 8) 或 San Francisco (iOS 9) 上使用。如果您有自定义字体并且想尊重用户的文本大小偏好怎么办呢?
SSDynamicText 是一组简单的 UILabel、UIButton、UITextField 和 UITextView 子类,灵感来源于 这个 SO 回答。
Xcode 7.0+ 和 iOS 7.0+ SDK。
SSDynamicText 提供了动态自动调整大小的标签、按钮、文本字段和文本视图,当用户更改她首选的文本大小时会做出响应。请查看完整的 示例。
响应用户首选文本大小的 UIKit 视图
SSDynamicLabelSSDynamicLabel *myLabel = [SSDynamicLabel labelWithFont:@"Courier"
baseSize:16.0f];
myLabel.text = @"Auto-sizing text!";
// Already have a font descriptor?
UIFontDescriptor *aDescriptor = [UIFontDescriptor fontDescriptorWithName:@"Courier"
size:16.0f];
SSDynamicLabel *otherLabel = [SSDynamicLabel labelWithFontDescriptor:aDescriptor];SSDynamicButtonSSDynamicButton *myButton = [SSDynamicButton buttonWithFont:@"Courier"
baseSize:16.0f];
[myButton setText:@"Auto-sizing text!" forControlState:UIControlStateNormal];SSDynamicTextFieldSSDynamicTextField *myTextField = [SSDynamicTextField textFieldWithFont:@"Courier"
baseSize:16.0f];
myTextField.text = @"Auto-sizing text!";SSDynamicTextViewSSDynamicTextView *myTextView = [SSDynamicTextView textViewWithFont:@"Courier"
baseSize:16.0f];
myTextView.text = @"Auto-sizing text!";UIFont+SSTextSize使用指定的字体名称和基本大小创建一个 UIFont 对象。返回的字体实际大小会根据用户当前的首选字体大小(在 Settings.app 中指定)进行调整。
UIFont *myFont = [UIFont dynamicFontWithName:@"Courier" baseSize:16.0f];UIApplication+SSTextSize此属性返回默认大小设置(大)和用户当前首选文本大小之间的数值增量。
您可能不需要直接使用它。
NSInteger textDelta = [[UIApplication sharedApplication] preferredFontSizeDelta];NSAttributedString 支持SSDynamicText 支持 attrited text!将您的 NSAttributedString 分配给新的 dynamicAttributedText 属性。
UITextView 和 UITextField 有时会即使使用普通文本也在内部调用 -setAttributedText: 方法。为了最好地适应这种内部实现细节,我们已经添加了一个新的 dynamicAttribtuedText 属性,而不是直接重写 -setAttributedText: 方法。
@property (nonatomic, copy) NSAttributedString *dynamicAttributedText;