UIScrollView 中的几个 UITextField,被键盘覆盖
Posted
技术标签:
【中文标题】UIScrollView 中的几个 UITextField,被键盘覆盖【英文标题】:Several UITextFields in a UIScrollView, covered by the keyboard 【发布时间】:2013-01-07 12:06:23 【问题描述】:我在UIScrollView
中有几个UITextFields
。当我编辑其中一个并弹出键盘时,该字段被键盘覆盖。
我想向上滚动视图,我以为这是 ios 自动完成的,但似乎不是这样。
我目前正在使用这个方法来滚动视图,但是效果不是很好。
- (void)scrollToView:(UIView *)view
CGRect viewFrame = [[edit scrollView] convertRect:[view frame] fromView:[view superview]];
CGRect finalFrame = CGRectMake(viewFrame.origin.x, viewFrame.origin.y, viewFrame.size.width, (viewFrame.size.height + (inputAccessory.frame.size.height) + 4.0));
[[edit scrollView] scrollRectToVisible:finalFrame animated:YES];
谢谢
【问题讨论】:
不能很好地工作。表示您面临什么问题? 【参考方案1】:就我而言,我所做的是在Editing Did Begin
的Editing Did Begin
事件中减小scrollView
的大小UITextField
,如下所示:
- (IBAction)didEnterInTextField:(id)sender
[sender becomeFirstResponder];
// Resize the scroll view to reduce the keyboard height
CGRect scrollViewFrame = self.scrollView.frame;
if (scrollViewFrame.size.height > 300)
scrollViewFrame.size.height -= 216;
self.scrollView.frame = scrollViewFrame;
// Scroll the view to see the text field
UITextField *selectedTextField = (UITextField *)sender;
float yPosition = selectedTextField.frame.origin.y - 60;
float bottomPositon = self.scrollView.contentSize.height - self.scrollView.bounds.size.height;
if (yPosition > bottomPositon)
yPosition = bottomPositon;
[self.scrollView setContentOffset:CGPointMake(0, yPosition) animated:YES];
【讨论】:
【参考方案2】:试试这个示例代码TPKeyboardAvoiding
它很容易实现。只需拖放自定义类并将自定义类从 UIScrollview 更改为 xib 中的TPKeyboardAvoidingScrollView
【讨论】:
【参考方案3】:这是一个很好的教程
http://www.iphonesampleapps.com/2009/12/adjust-uitextfield-hidden-behind-keyboard-with-uiscrollview/
希望对你有帮助
【讨论】:
【参考方案4】:// 注册键盘通知
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
在这两种方法中设置滚动视图的框架..当键盘显示或隐藏时。
或者设置滚动视图的scrollRectToVisible
【讨论】:
【参考方案5】:- (void)scrollViewToCenterOfScreen:(UIView *)theView
CGFloat viewCenterY = theView.center.y;
CGFloat availableHeight;
CGFloat y;
if(!isReturned)
if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
availableHeight = 1080;
else
availableHeight = 220;
else
if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPad)
availableHeight = 1400;
else
availableHeight = 530;
y = viewCenterY - availableHeight / 2.0;
if (y < 0)
y = 0;
[sclView setContentOffset:CGPointMake(0, y) animated:YES];
在 textfield 或 textview 中调用此方法开始编辑。它会起作用。
【讨论】:
以上是关于UIScrollView 中的几个 UITextField,被键盘覆盖的主要内容,如果未能解决你的问题,请参考以下文章
iOS 设计中关于UIScrollViewDelegate的几个代理方法的简单介绍