将转换应用于UITextView – 防止内容大小调整

当我将一个旋转变换应用到UITextView ,然后点击里面开始编辑时,内容大小似乎会自动变宽。 内容视图的新宽度是旋转的视图的边界框的宽度。 例如,给定一个宽度为500,高度为400,旋转30度的文本框,新的内容宽度为:

 (500 * cos(30)) + (400 * sin(30)) = 633 

或以graphics方式:

在这里输入图像说明

有趣的是,如果您已经在编辑文本视图,然后应用转换,那么似乎没有对内容大小进行修改。 因此,在文本编辑开始的某个时候,文本视图会查看其frame属性,并根据帧宽度调整内容大小。 我想这个解决scheme是告诉它使用bounds属性,但是我不知道该怎么做,因为我不确定文本视图在哪里决定修改内容的大小。

我google了,但似乎无法find使用转换UITextViews的任何引用。 有没有人有这个想法?

编辑(testing项目中的button动作):

 - (IBAction)rotateButtonTapped:(id)sender { if (CGAffineTransformIsIdentity(self.textView.transform)) { self.textView.transform = CGAffineTransformMakeRotation(30.0 * M_PI / 180.0); } else { self.textView.transform = CGAffineTransformIdentity; } NSLog(@"contentsize: %.0f, %.0f", textView.contentSize.width, textView.contentSize.height); } 

我也被这个问题困住了。

我发现唯一的解决scheme是创build一个UIView的实例,并添加UITextView作为子视图。 然后,你可以旋转UIView的实例,UITextView将工作得很好。

 UITextView *myTextView = [[UITextView alloc] init]; [myTextView setFrame:CGRectMake(0, 0, 100, 100)]; UIView *myRotateView = [[UIView alloc] init]; [myRotateView setFrame:CGRectMake(20, 20, 100, 100)]; [myRotateView setBackgroundColor:[UIColor clearColor]]; [myRotateView addSubview:myTextView]; myRotateView.transform = CGAffineTransformMakeRotation(0.8); [[self view] addSubview:myRotateView]; 

你有没有尝试应用旋转,而不是在视图上进行转换?

 #import <QuartzCore/QuartzCore.h> mytextField.layer.transform = CATransform3DMakeRotation (angle, 0, 0, 1); 

这可能足以欺骗核心文本字段代码中存在的任何破坏的逻辑。