如何在不调整大小的情况下旋转 UITextView?

Posted

技术标签:

【中文标题】如何在不调整大小的情况下旋转 UITextView?【英文标题】:How to rotate a UITextView without it resizing? 【发布时间】:2014-10-09 14:53:18 【问题描述】:

我正在尝试在我的 VC 中旋转 UITextView。当我尝试旋转它时,UITextView 会调整它的大小?

这是我的代码。

    - (void)viewDidLoad 

        [super viewDidLoad];
        self.edgesForExtendedLayout = UIRectEdgeNone;

        self.title = @"Signature View";

        [self.signatureView setLineWidth:2.0];
        self.signatureView.foregroundLineColor = [UIColor colorWithRed:0.204 green:0.596 blue:0.859 alpha:1.000];

         NSLog(@"contentsize: %.0f, %.0f", self.view.frame.size.width, self.view.frame.size.height); <-- this is (contentsize: 320, 568)

        self.howToTextView.frame = CGRectMake(0, 0, self.view.frame.size.height, self.view.frame.size.width); 

        [self.howToTextView setNeedsDisplay]; <-- to make it redraw 

        [self.howToTextView setTransform:CGAffineTransformMakeRotation(-90* M_PI/180)];

        NSLog(@"contentsize: %.0f, %.0f", self.howToTextView.contentSize.width, self.howToTextView.contentSize.height); <--- turns out to be (contentsize: 103, 138)same as on storyboard design

    

更新(使用此代码,uitextview 就位并且框架正确,但不是文本不会调整大小以填充 uitextviews 新框架大小。它卡在底角?):

    - (void)viewDidLoad 

        [super viewDidLoad];
        self.edgesForExtendedLayout = UIRectEdgeNone;

        self.title = @"Signature View";

        [self.signatureView setLineWidth:2.0];
        self.signatureView.foregroundLineColor = [UIColor colorWithRed:0.204 green:0.596 blue:0.859 alpha:1.000];

         NSLog(@"contentsize: %.0f, %.0f", self.view.frame.size.width, self.view.frame.size.height);

        self.howToTextView = [[UITextView alloc] init];
        self.howToTextView.backgroundColor = [UIColor redColor];
        self.howToTextView.text = @"this is a good day. i am going to make millions today. Smile while on the phone as it is the best way to increase your business. I hope that you like this app as we have work really hard on it. Please sign your name or decline but if you decline then you understand you lose all  coverage.";

        [self.view addSubview:self.howToTextView];


        [self.howToTextView setTransform:CGAffineTransformMakeRotation(-90* M_PI/180)];
        self.howToTextView.frame = CGRectMake(0, 0, 80, self.view.frame.size.height);
        [self.howToTextView setNeedsDisplay];

        NSLog(@"contentsize: %.0f, %.0f", self.howToTextView.contentSize.width, self.howToTextView.contentSize.height);

    

更新 2:将 textview 粘贴在 UIView 中可以使内容大小正确,但现在使用此代码,uitextview/uiview 位于应用程序的右上角,即使我将它们都设置为 x 的 0,0 ,是吗?不知道为什么会这样?

        self.howToTextView = [[UITextView alloc] init];
        [self.howToTextView setFrame:CGRectMake(0, 0, self.view.frame.size.height-20, 110)];
        self.howToTextView.backgroundColor = [UIColor redColor];
        self.howToTextView.text = @"this is a good day. i am going to make millions today. Smile while on the phone as it is the best way to increase your business. I hope that you like this app as we have work really hard on it. Please sign your name or decline but if you decline then you understand you lose all  coverage.";

        UIView *myRotateView = [[UIView alloc] init];
        [myRotateView setFrame:CGRectMake(0, 0, self.view.frame.size.height, 120)];
        [myRotateView setBackgroundColor:[UIColor greenColor]];
        [myRotateView addSubview:self.howToTextView];

        myRotateView.transform = CGAffineTransformMakeRotation(-90* M_PI/180);
        [[self view] addSubview:myRotateView];

【问题讨论】:

如果您使用情节提要,即使没有转换,您的内容大小也可能会被修改。是这样吗? 是的,我现在从情节提要中删除并手动创建它。我有正确的形状和大小,但现在文本只占用了大约 0.10 的 UITextView。它就像 UITextView 的外边缘已经正确更改但内部内容和文本并没有意识到它。更新上面的代码。 【参考方案1】:

经过两天的努力,我找到了解决方法:

    创建一个 UIView。 将您的 UITextView 作为子视图添加到其中。 使用 sizeThatFits() 获取 UITextView 的正确大小。 设置 UITextView 框架。 将 UIView 框架设置为 0 高度和 0 宽度(这很重要!)。 旋转您的 UIView。

现在,如果您想更改字体大小,请这样做:

myTextView.font = UIFont.boldSystemFontOfSize(size)
let maxsize = CGSizeMake(SCREEN_WIDTH, SCREEN_HEIGHT)
let frame = myTextView.sizeThatFits(maxsize)
myTextView.frame = CGRectMake(0, 0, frame.width, frame.height)

最后再次旋转 UIView。

【讨论】:

以上是关于如何在不调整大小的情况下旋转 UITextView?的主要内容,如果未能解决你的问题,请参考以下文章

UITextContainerView 仅在以大于 45° 的角度旋转时才调整为他的 UITextView 超级视图的大小

是否可以制作一个 UILabel、UITextView 或类似的东西,它总是在不截断的情况下调整其高度以适应其在 Interface Builder 中的内容?

如何在不改变宽高比的情况下调整视频大小?

如何在不缩放其内容的情况下调整 opengl 视口大小

python如何在不损失质量的情况下调整(缩小)图像的大小

如何在不裁剪的情况下调整新图像对象的大小?