3 回答
TA贡献1946条经验 获得超3个赞
在iOS 7之后,styleString方法不再起作用。
有两种新的选择。
首先是TextKit;强大的新版式引擎。要更改行距,请设置UITextView的布局管理器的委托:
textView.layoutManager.delegate = self; // you'll need to declare you implement the NSLayoutManagerDelegate protocol
然后重写此委托方法:
- (CGFloat)layoutManager:(NSLayoutManager *)layoutManager lineSpacingAfterGlyphAtIndex:(NSUInteger)glyphIndex withProposedLineFragmentRect:(CGRect)rect
{
return 20; // For really wide spacing; pick your own value
}
其次,iOS 7现在支持NSParagraphStyle的lineSpacing。这样可以提供更多控制,例如第一行缩进和边界矩形的计算。所以或者...
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
paragraphStyle.headIndent = 15; // <--- indention if you need it
paragraphStyle.firstLineHeadIndent = 15;
paragraphStyle.lineSpacing = 7; // <--- magic line spacing here!
NSDictionary *attrsDictionary =
@{ NSParagraphStyleAttributeName: paragraphStyle }; // <-- there are many more attrs, e.g NSFontAttributeName
self.textView.attributedText = [[NSAttributedString alloc] initWithString:@"Hello World over many lines!" attributes:attrsDictionary];
FWIW,在iOS7下也没有使用旧的contentInset方法来沿UITextView的左边缘对齐文本。相反,要删除边距:
textView.textContainer.lineFragmentPadding = 0;
TA贡献1772条经验 获得超8个赞
仅当您在UITextView上定义了定义styleString的类别时,才可以使用styleString的UITextView子类重写,否则会出现编译错误。例如,在您的UITextView子类中:
#import "SomeDangTextView.h"
@interface UITextView ()
- (id)styleString;
@end
@implementation SomeDangTextView
- (id)styleString {
return [[super styleString] stringByAppendingString:@"; line-height: 1.5em"];
}
@end
- 3 回答
- 0 关注
- 1328 浏览
添加回答
举报