2

我有一个 UITextView 可以旋转,调整大小拖动等,当我调整大小或旋转或拖动时,在 iOS 6 和 iOS 5 上一切正常,但是当我旋转 UITextView 然后调整大小时会出现以下结果:

在此处输入图像描述

该 textView 现在没有换行符,它在 iOS 6 上运行良好在此处输入图像描述

对于旋转,我正在使用:

- (void)rotation:(CGFloat)newAngle {
    self.transform = CGAffineTransformMakeRotation(newAngle *  M_PI / 180);
}

对于调整大小,我计算用户设置的宽度的新字体大小并设置边界:

CGSize newFrameSize = [self sizeThatFits:CGSizeMake([[self getLongestStringInTextView] sizeWithFont:self.font].width + 30, CGFLOAT_MAX)];
self.bounds = CGRectMake(self.bounds.origin.x, self.bounds.origin.y, newFrameSize.width, newFrameSize.height);

我知道这是界限的问题,但我不确定出了什么问题或者我做错了什么

4

1 回答 1

0

好的,我修好了。

我们有一个 KVO 边界观察器

[self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionOld context:NULL];

跟踪边界变化并将边界设置为 CGRectZero

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"bounds"]) {
        [self removeObserver:self forKeyPath:@"bounds"];

        CGRect bounds = self.bounds;
        self.bounds = CGRectZero;
        self.bounds = bounds;

        [self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionOld context:NULL];
    }
}

它在 iOS 6 上运行良好,但在 iOS 5 上不行,通过将 frame 设置为 CGRectZero 也得到了修复

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    if ([keyPath isEqualToString:@"bounds"]) {
        [self removeObserver:self forKeyPath:@"bounds"];

        CGRect bounds = self.bounds;
        CGRect frame = self.frame;
        self.frame = CGRectZero;
        self.bounds = CGRectZero;
        self.frame = frame;
        self.bounds = bounds;

        [self addObserver:self forKeyPath:@"bounds" options:NSKeyValueObservingOptionOld context:NULL];
    }
}
于 2013-04-29T10:50:56.280 回答