UITextView中firstRectForRange方法的CGRect在iOS 9中返回错误的帧位置

UITextView中firstRectForRange方法的CGRect在iOS 9中返回错误的帧位置,ios,uitextview,cgrect,uitextposition,uitextrange,Ios,Uitextview,Cgrect,Uitextposition,Uitextrange,在带iOS 8和iOS 9的iPod 5/iPad中运行以下代码会得到以下输出 CGRect textViewFrame; if(IS_IPHONE_5) textViewFrame = CGRectMake(0.0f, 64.0f, 320.0f, 390.0f); else textViewFrame = CGRectMake(0.0f, 64.0f, 320.0f, 320.0f); textViewText = [[UITextView alloc] initWithFr

在带iOS 8和iOS 9的iPod 5/iPad中运行以下代码会得到以下输出

CGRect textViewFrame;
if(IS_IPHONE_5)
    textViewFrame = CGRectMake(0.0f, 64.0f, 320.0f, 390.0f);
else
    textViewFrame = CGRectMake(0.0f, 64.0f, 320.0f, 320.0f);
textViewText = [[UITextView alloc] initWithFrame:textViewFrame];
textViewText.returnKeyType = UIReturnKeyDone;
textViewText.delegate = self;
textViewText.backgroundColor = [UIColor clearColor];
[self.view addSubview:textViewText];

[self.textViewText setFont:[UIFont fontWithName:@"PT Mono" size:16]];
[self.textViewText setTextColor:[UIColor colorWithRed:32.0f/255.0f green:32.0f/255.0f blue:32.0f/255.0f alpha:1]];    
CGRect rect=[textView firstRectForRange:textRange];//这里有问题

ios8输出:{x=0,y=201,宽=50,高=19}

iOS 9输出:{x=0,y=293,宽度=50,高度=19.4}

在iOS 9中,Y坐标和高度发生变化

UITextView中有任何更改吗??

检查附加的屏幕截图


检查
textView.contentOffset.y的值,看看这是否是
y
值差异的原因?假设您在示例中向下滚动了82个点。这似乎可能与y偏移问题有关,因为包装似乎正确,并且两种情况下的x值均为0。iOS9中字体的细微变化可能会导致高度差异。您从何处调用此代码?它应该在
视图中出现
或更高版本。罗伊,我们尝试了在ViewDidDisplay中出现。但最终结果是一样的。如果是iOS 9中的字体更改,我们如何修复它?如何在iOS 8和iOS 9中实现这一点。你有办法解决这个问题吗?我将检查并让您知道iOS 8和9I中textView.contentOffset.y的值,这意味着19和19.4之间的高度差可能是由于iOS 9中的字体略有不同。你对此无能为力。根据您设置文本区域的方式,iOS还可以稍微缩放字体以适合文本。我认为y位置差异的真正问题将取决于布局。还注意到你的两张图片分别是iOS8上的ipadmini和iOS9上的iPad。我想你用的是真的设备吧?你是否在模拟器中的同类设备上看到了相同的情况:iOS8 iPad与iOS9 iPad。在iOS 8和iOS 9中,最好在相同的滚动偏移量下进行相似比较。Roy,
textView.contentOffset.y值均为0
。在模拟器中也存在同样的问题。设备和模拟器没有区别。我们以编程方式而不是在布局中创建TextView。
 UITextPosition *beginning = textView.beginningOfDocument;

UITextPosition *start = [textView positionFromPosition:beginning offset:range.location];
UITextPosition *end = [textView positionFromPosition:start offset:range.length];
UITextRange *textRange = [textView textRangeFromPosition:start toPosition:end];

CGRect rect = [textView firstRectForRange:textRange];
rect.size.width = rect.size.width + 2;
rect.origin.x = rect.origin.x - 1;

return [textView convertRect:rect fromView:textView.textInputView];