【问题标题】:Changing UITextView font size after rotation works weird on iOS 5旋转后更改 UITextView 字体大小在 iOS 5 上很奇怪
【发布时间】:2013-04-28 10:17:08
【问题描述】:

我有一个 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);

我知道这是边界问题,但我不确定哪里出了问题或我做错了什么

【问题讨论】:

  • 但是你为什么要设置绑定?可能有类似 sizeToFit 的方法。
  • 这里,你假设使用框架而不是边界
  • 我在设置框架和中心点时得到相同的结果,并且框架在 iOS 6 上也不起作用。 sizeToFit 和我做的一样,它也不适用于多行 UITextView跨度>

标签: ios objective-c uitextview frame


【解决方案1】:

好的,我修好了。

我们有一个 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];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    相关资源
    最近更新 更多