gpt4 book ai didi

objective-c - SetFrame 适用于 iPhone,但不适用于 iPad。自动调整蒙版大小是罪魁祸首?

转载 作者:可可西里 更新时间:2023-11-01 04:44:47 25 4
gpt4 key购买 nike

我正在尝试在键盘显示时调整 UITextView 的大小。在 iPhone 上它运行得很漂亮。当系统发出键盘通知时, TextView 会调整大小。完成编辑后,我调整它的大小以填充初始空间。 (是的,我假设当编辑停止时键盘不见了。我应该改变它。但是,我认为这不是我的问题。)

当我在 iPad 上调整 TextView 大小时,框架正确调整大小,但应用程序似乎将框架的 Y 值重置为零。这是我的代码:

- (void) keyboardDidShowWithNotification:(NSNotification *)aNotification{

//
// If the content view being edited
// then show shrink it to fit above the keyboard.
//

if ([self.contentTextView isFirstResponder]) {

//
// Grab the keyboard size "meta data"
//

NSDictionary *info = [aNotification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

//
// Calculate the amount of the view that the keyboard hides.
//
// Here we do some confusing math voodoo.
//
// Get the bottom of the screen, subtract that
// from the keyboard height, then take the
// difference and set that as the bottom inset
// of the content text view.
//

float screenHeightMinusBottom = self.contentTextView.frame.size.height + self.contentTextView.frame.origin.y;

float heightOfBottom = self.view.frame.size.height - screenHeightMinusBottom;


float insetAmount = kbSize.height - heightOfBottom;

//
// Don't stretch the text to reach the keyboard if it's shorter.
//

if (insetAmount < 0) {
return;
}

self.keyboardOverlapPortrait = insetAmount;

float initialOriginX = self.contentTextView.frame.origin.x;
float initialOriginY = self.contentTextView.frame.origin.y;

[self.contentTextView setFrame:CGRectMake(initialOriginX, initialOriginY, self.contentTextView.frame.size.width, self.contentTextView.frame.size.height-insetAmount)];


}

为什么这可以在 iPhone 上运行,而不能在 iPad 上运行?另外,我的 autoresize 蒙版是否会发生意想不到的变化?

最佳答案

就像@bandejapaisa 说的那样,我发现方向是个问题,至少在我的测试中是这样。

首先,关于 kbSize.height 的使用具有误导性,因为在横向模式下它代表键盘的宽度。因此,由于您的代码位于 UIViewController 中,您可以这样使用它:

float insetAmount = (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)?kbSize.height:kbSize.width) - heightOfBottom;

self.interfaceOrientation 给出接口(interface)的方向(可以不同于设备方向)并且宏 UIInterfaceOrientationIsPortrait 返回 YES 如果给定的方向是纵向(顶部或底部)。所以当界面为Portrait时键盘高度在kbSize.height中,当界面为Landscape时键盘高度在kbSize.width中,我们只需要测试方向获得良好的值(value)。

但这还不够,因为我发现 self.view.frame.size.height 值也有同样的问题。所以我使用了相同的解决方法:

float heightOfBottom = (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)?self.view.frame.size.height:self.view.frame.size.width) - screenHeightMinusBottom;

希望这有助于...

关于objective-c - SetFrame 适用于 iPhone,但不适用于 iPad。自动调整蒙版大小是罪魁祸首?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7459606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com