键盘可见的 UIScrollView

Posted

技术标签:

【中文标题】键盘可见的 UIScrollView【英文标题】:UIScrollView with keyboard visible 【发布时间】:2015-03-21 15:35:35 【问题描述】:

我有一个UITextView(也是一个UIScrollView),其中包含一堆文本。在屏幕截图中,键盘下方有更多文字。我无法向上滚动查看该文本 - 无论我做什么,该文本都保留在键盘下方。

如何解决问题,以便滚动查看所有文本?

【问题讨论】:

您应该监听键盘通知并在必要时修改内容插入(或滚动视图框架)。在您的情况下,滚动视图“不知道”它的那一部分被键盘覆盖。 This project 应该可以帮助您入门。 【参考方案1】:

这很有效,而且非常简单。

在.h中

@property (weak, nonatomic) IBOutlet UITextView *tv;
@property CGSize keyboardSize;

在.m中

- (void)viewDidLoad 
[super viewDidLoad];

// Register for keyboard notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];


- (void) keyboardWillShow: (NSNotification*) aNotification 

// Get the keyboard size from the notification userInfo
NSDictionary *info = [aNotification userInfo];
self.keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

// Adjust the content inset from the bottom by the keyboard's height
UIEdgeInsets contentInsets = UIEdgeInsetsMake(0, 0, self.keyboardSize.height, 0);
self.tv.contentInset = contentInsets;


- (void) keyboardWillHide: (NSNotification*) aNotification 

// Reset the content inset when the keyboard is dismissed
self.tv.contentInset = UIEdgeInsetsZero;

【讨论】:

感谢这个对我有用的解决方案,最好更改插图而不是内容大小【参考方案2】:

scrollView 有一个名为contentSize 的属性,它决定了用户可以滚动到的区域。您必须手动更改此值以补偿因键盘而产生的额外滚动空间。

我的建议是注册通知UIKeyboardWillHideNotificationUIKeyboardWillShowNotification

当键盘即将显示时,UIKeyboardWillShowNotification 通知被触发,并在相应的方法中将键盘高度添加到滚动contentSize 高度。

同样,从UIKeyboardWillHideNotification 通知中的滚动contentSize 高度中扣除此高度。

希望这会有所帮助! :)

【讨论】:

【参考方案3】:

为了避免所有手动调整大小和其他东西,我建议使用这个很棒的库 - https://github.com/hackiftekhar/IQKeyboardManager。它会为您完成所有的艰苦工作。

【讨论】:

以上是关于键盘可见的 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

ios键盘可点击但不可见

键盘可见的 UIScrollView

当它已经可见时关闭键盘

转换到带键盘可见的模态视图控制器

如果键盘可见,则防止关闭 BottomSheetDialogFragment

iOS:如何获取当前可见的键盘类型?