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 では正常に動作しますが、フレームを CGRectZero に設定することで修正された iOS 5 では動作しません。

- (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 に答える