iOS:键盘出现时触发什么事件
iOS: What event is triggered when the keyboard appears
我正在为我正在处理的项目使用 JSQMessagesController,并在 Github 页面上打开了一个问题,但是在与作者协商后我们无法解决该问题。
我有一个由消息列表填充的 collectionView,但是当第一次加载视图时,顶部消息从屏幕顶部被截断,当显示和关闭键盘时,视图按预期显示如下所示:
显示键盘时,显然会触发一个使布局重新生效的事件,但它是什么?我尝试了以下步骤:
self.collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()
但这并没有解决问题 - 任何见解将不胜感激。
编辑:经过测试,当我为视图设置背景图像时,视图层次结构似乎无效:
backgroundView = UIImageView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
backgroundView.image = UIImage(named: "background")
self.view.insertSubview(backgroundView, atIndex: 0)
删除这些行可以消除不需要的顶部边距,但是调出键盘仍会解决损坏的约束。
您可以使用您使用的 UITextField
的 delegate
方法:
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
你试过下面的解决方案吗..在
-(void) viewWillLayoutSubviews
//(要么)
-(无效)viewDidLoad 方法
self.navigationController.navigationBar.translucent = NO;
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
希望对您有所帮助...!
您是否尝试过更改集合视图的插图?类似于:
[self.collectionView setContentInset:UIEdgeInsetsMake(64.0, 0.0, 0.0, 0.0)];
嗯,要更新代码中的约束,您必须执行如下操作:
[self.collectionView removeConstraints:self.collectionView.constraints];
NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:self.collectionView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.topLayoutGuide
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
NSLayoutConstraint *leading = [NSLayoutConstraint
constraintWithItem:self.collectionView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:0.f];
NSLayoutConstraint *trailing = [NSLayoutConstraint
constraintWithItem:self.collectionView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeTrailing
multiplier:1.0f
constant:0.f];
NSLayoutConstraint *bottom = [NSLayoutConstraint
constraintWithItem:self.collectionView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.bottomLayoutGuide
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:0.f];
[self.collectionView addConstraints:@[top,leading,trailing,bottom]];
我正在为我正在处理的项目使用 JSQMessagesController,并在 Github 页面上打开了一个问题,但是在与作者协商后我们无法解决该问题。
我有一个由消息列表填充的 collectionView,但是当第一次加载视图时,顶部消息从屏幕顶部被截断,当显示和关闭键盘时,视图按预期显示如下所示:
显示键盘时,显然会触发一个使布局重新生效的事件,但它是什么?我尝试了以下步骤:
self.collectionView.collectionViewLayout.invalidateLayout()
self.collectionView.reloadData()
但这并没有解决问题 - 任何见解将不胜感激。
编辑:经过测试,当我为视图设置背景图像时,视图层次结构似乎无效:
backgroundView = UIImageView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height))
backgroundView.image = UIImage(named: "background")
self.view.insertSubview(backgroundView, atIndex: 0)
删除这些行可以消除不需要的顶部边距,但是调出键盘仍会解决损坏的约束。
您可以使用您使用的 UITextField
的 delegate
方法:
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView
你试过下面的解决方案吗..在
-(void) viewWillLayoutSubviews //(要么) -(无效)viewDidLoad 方法
self.navigationController.navigationBar.translucent = NO;
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
希望对您有所帮助...!
您是否尝试过更改集合视图的插图?类似于:
[self.collectionView setContentInset:UIEdgeInsetsMake(64.0, 0.0, 0.0, 0.0)];
嗯,要更新代码中的约束,您必须执行如下操作:
[self.collectionView removeConstraints:self.collectionView.constraints];
NSLayoutConstraint *top = [NSLayoutConstraint constraintWithItem:self.collectionView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.topLayoutGuide
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0];
NSLayoutConstraint *leading = [NSLayoutConstraint
constraintWithItem:self.collectionView
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeLeading
multiplier:1.0f
constant:0.f];
NSLayoutConstraint *trailing = [NSLayoutConstraint
constraintWithItem:self.collectionView
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self
attribute:NSLayoutAttributeTrailing
multiplier:1.0f
constant:0.f];
NSLayoutConstraint *bottom = [NSLayoutConstraint
constraintWithItem:self.collectionView
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.bottomLayoutGuide
attribute:NSLayoutAttributeTop
multiplier:1.0f
constant:0.f];
[self.collectionView addConstraints:@[top,leading,trailing,bottom]];