据我所知,Apple 的 TextKit 不支持 NSTypesetter(可以从上到下设置书写方向),但我的语言(传统蒙古语)应该从上到下书写。所以我想用子类化自定义 UITextView 并做了一个简单的演示,如下所示(将 UITextView 旋转为 M_PI/2)。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.height, frame.size.width)];
if (self) {
CGAffineTransform transform = CGAffineTransformRotate(self.transform, M_PI/2);
CGFloat translate = (frame.size.height - frame.size.width) / 2;
transform = CGAffineTransformTranslate(transform, translate, translate);
transform = CGAffineTransformScale(transform, 1, -1);
self.transform = transform;
}
return self;
}
并创建一个宽度=100 & 高度=200 的 TextView:
ZGTextView *textView = [[ZGTextView alloc] initWithFrame:CGRectMake(110, 20, 100, 200)];
textView.text = @"012345678901234567890123456789012345678901234567890123456789";
[self.view addSubview:textView];
但是在运行demo时,我发现文本容器只使用了我的TextView的上半部分,即使我用initWithSize方法初始化了TextContainer。我猜这是因为 NSLayoutManager 自动将行长度设置为适合 TextView 的宽度(在我的测试宽度 = 100,高度 = 200),但在我的 ZGTextView 中它应该适合 TextView 的高度(垂直线)。
有什么方法可以自定义 NSLayoutManager 以支持适合 UITextView 高度的绘制线?