Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当键盘出现时,如何向上移动UIScrollView?_Ios_Objective C_Xcode_Uiscrollview_Keyboard - Fatal编程技术网

Ios 当键盘出现时,如何向上移动UIScrollView?

Ios 当键盘出现时,如何向上移动UIScrollView?,ios,objective-c,xcode,uiscrollview,keyboard,Ios,Objective C,Xcode,Uiscrollview,Keyboard,更新: 我的问题是:如何防止在单击另一个文本字段时将scrollview重置为该位置 事实上,我已经尝试了几种方法,比如解决这个问题的方法 最初,我的scrollView包含多个textfield和textview,故事板中的所有位置都位于位置0,302。当键盘出现时,我想把它移动到0,100。首先,我尝试添加一个按钮并执行以下操作,它可以正常工作 CGRect frame = self.informationScrollView.frame; frame.origin.y = 100; sel

更新:

我的问题是:如何防止在单击另一个文本字段时将scrollview重置为该位置

事实上,我已经尝试了几种方法,比如解决这个问题的方法

最初,我的scrollView包含多个textfield和textview,故事板中的所有位置都位于位置0,302。当键盘出现时,我想把它移动到0,100。首先,我尝试添加一个按钮并执行以下操作,它可以正常工作

CGRect frame = self.informationScrollView.frame;
frame.origin.y = 100;
self.informationScrollView.frame = frame;
然后我尝试在UIKeyboardDidShowNotification的选择器中执行相同的代码,但失败了。我发现即使活动文本字段已更改,位置也始终会重置。有人能告诉我如何防止应用程序重置位置吗?非常感谢

CGRect frame = self.informationScrollView.frame;

[UIView animateWithDuration:1
                      delay:0
                    options: UIViewAnimationOptionCurveEaseInOut
                 animations:^{

                 self.informationScrollView setFrame:CGRectMake (frame.origin.x,
                                                                 frame.origin.y, 
                                                                 frame.size.width, 
                                               <change height as per requirement>);
                 }
                 completion:nil];
对于多个文本字段:

希望这有帮助

对于多个文本字段:


希望这能有所帮助。

将其用于viewDidLoad方法非常简单

并根据其中的键盘高度为scrollView编写代码

-(void)keyboardWasShown:(NSNotification*)notification
{
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(self.view.frame.origin.x,self.view.frame.origin.y, kbSize.height+100, 0);
self.scrollViewChildDetail.contentInset = contentInsets;
self.scrollViewChildDetail.scrollIndicatorInsets = contentInsets;
}

-(void)keyboardWillBeHidden:(NSNotification *)notification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.scrollViewChildDetail.contentInset = contentInsets;
self.scrollViewChildDetail.scrollIndicatorInsets = contentInsets;
}

它可以工作。

将其用于viewDidLoad方法非常简单

CGRect frame = self.informationScrollView.frame;
frame.origin.y = 100;
self.informationScrollView.frame = frame;
并根据其中的键盘高度为scrollView编写代码

-(void)keyboardWasShown:(NSNotification*)notification
{
NSDictionary *info = [notification userInfo];
CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
UIEdgeInsets contentInsets = UIEdgeInsetsMake(self.view.frame.origin.x,self.view.frame.origin.y, kbSize.height+100, 0);
self.scrollViewChildDetail.contentInset = contentInsets;
self.scrollViewChildDetail.scrollIndicatorInsets = contentInsets;
}

-(void)keyboardWillBeHidden:(NSNotification *)notification
{
UIEdgeInsets contentInsets = UIEdgeInsetsZero;
self.scrollViewChildDetail.contentInset = contentInsets;
self.scrollViewChildDetail.scrollIndicatorInsets = contentInsets;
}

它可以工作。

如果ypu正在使用UIScrollView,那么您应该查看。它易于使用,并给出了预期的结果。您只需将TPAvoidingScrollView设置为UIScrollView的超类,一切都将由TPScrollView处理。试试看。希望这有帮助。

如果ypu正在使用UIScrollView,那么您应该查看。它易于使用,并给出了预期的结果。您只需将TPAvoidingScrollView设置为UIScrollView的超类,一切都将由TPScrollView处理。试试看。希望这能有所帮助。

以下是苹果批准的官方方法:

CGRect frame = self.informationScrollView.frame;
frame.origin.y = 100;
self.informationScrollView.frame = frame;

但是,如果您使用的是Autolayout,我建议您使用约束来管理UITextView和屏幕底部之间的空间,并通过上述文章中提到的键盘显示通知和此处的其他解决方案,通过编程更改其常量值以匹配键盘高度。这是因为您可以收到多个不同高度的键盘显示通知,如果您尝试切换视图框,这些通知可能会中断。

以下是苹果批准的官方方法:

但是,如果您使用的是Autolayout,我建议您使用约束来管理UITextView和屏幕底部之间的空间,并通过上述文章中提到的键盘显示通知和此处的其他解决方案,通过编程更改其常量值以匹配键盘高度。这是因为您可以接收不同高度的多个键盘显示通知,如果您尝试切换视图框,这些通知可能会中断。

使用NSNotificationCenter的最佳概念,该概念由@Sarat\u Patel解释

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardDidHideNotification object:nil];
并用本地方法处理:

-(void)keyboardWasShown:(NSNotification*)notification
-(void)keyboardWillBeHidden:(NSNotification *)notification
使用由@Sarat_Patel解释的NSNotificationCenter的最佳概念

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardDidHideNotification object:nil];
并用本地方法处理:

-(void)keyboardWasShown:(NSNotification*)notification
-(void)keyboardWillBeHidden:(NSNotification *)notification

使用UIScrollView的最佳做法是根据键盘的外观设置ContentInset和ScrollIndicationSet。如果滚动视图的内容是UITextField和UITextView实例,则应通过contentOffset偏移滚动视图内容,而不是移动滚动视图的框架


也就是说,如果您真的需要移动滚动视图及其反弹,可能与布局约束有关。

使用UIScrollView的最佳做法是根据键盘的外观设置ContentInset和ScrollIndicationSet。如果滚动视图的内容是UITextField和UITextView实例,则应通过contentOffset偏移滚动视图内容,而不是移动滚动视图的框架


也就是说,如果您真的需要移动滚动视图及其反弹,可能与布局约束有关。

为什么不尝试滚动视图的内容偏移量为什么不尝试滚动视图的内容偏移量否,我想更改的是frame.origin.u根据您的要求更新帧值,这只是一个示例代码。在您的情况下,将Y值作为frame.origin.Y-是的,它在开始时起作用。但当我点击另一个文本字段时,scrollView会返回到故事板中设置的原始位置,我如何防止它?在这种情况下,我建议您做另一件事。在回答中检查我的更新。我还粘贴了问题的链接。不,我要更改的是frame.origin.y根据您的要求更新框架值,这只是一个示例代码。在您的情况下,将Y值作为frame.origin.Y-是的,它在开始时起作用。但当我点击另一个文本字段时,scrollView会返回到故事板中设置的原始位置,我如何防止它?在这种情况下,我建议您再做一次

事情在回答中检查我的更新。我也在我的问题上粘贴了链接。谢谢,但它似乎只是向上移动了scrollview的内容,而不是scrollview。是的,这和你想要的一样。在显示键盘时移动scrollview是很糟糕的编程。我们在这里设置了一个scrollview的内容,而不是完整的scrollview。但是我还想向上移动scrollview,因为首先内容只显示在手机底部,当键盘出现时,键盘将隐藏所有的scrollview。因此,我需要向上移动整个scrollview,然后您只需在上述方法中设置scrollview框架,这就是我的问题所在。当点击另一个文本字段时,scrollView的框架总是会被重置。谢谢,但它似乎只是向上移动了scrollView的内容,而不是scrollView。是的,这和你想要的是一样的。在显示键盘时移动scrollview是很糟糕的编程。我们在这里设置了一个scrollview的内容,而不是完整的scrollview。但是我还想向上移动scrollview,因为首先内容只显示在手机底部,当键盘出现时,键盘将隐藏所有的scrollview。因此,我需要向上移动整个scrollview,然后您只需在上述方法中设置scrollview框架,这就是我的问题所在。当单击另一个文本字段时,滚动视图的框架总是被重置。它是相同的。亲爱的@DSPIts,无需反复回答。亲爱的@DSPThanks,无需反复回答。也许我应该读更多的例子,因为我是iOS开发新手,不太熟悉ContentInset、ScrollIndicationSet和contentOffset。我能做的就是从“管理键盘:文本编程指南”的示例中复制代码,但不知道为什么会这样。谢谢。也许我应该读更多的例子,因为我是iOS开发新手,不太熟悉ContentInset、ScrollIndicationSet和contentOffset。我所能做的就是从“管理键盘:文本编程指南”的示例中复制代码,但不知道为什么会这样。请对此进行投票。非常容易进入,非常许可-没有理由不这样做。请投赞成票。非常容易进入,非常许可-没有理由不这样做。