【问题标题】:contentInset being ignored in ios7 for UIScrollViewios7 中的 UIScrollView 忽略 contentInset
【发布时间】:2014-01-14 00:46:04
【问题描述】:

这在 ios7 之前有效,当时有人点击了 UIScrollView 中可能成为第一响应者的任何东西。现在它没有了 - UITextFields/Views 仍然可以显示在键盘下。

代码:

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

//Some similar questions mentioned this might work, but made no difference for me
self.automaticallyAdjustsScrollViewInsets=NO;

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

float height = 0.0;

if (UIDeviceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) {
    height = kbSize.width;
} else {
    height = kbSize.height;
}

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, height, 0.0);


[UIView animateWithDuration:.25
                      delay:0
                    options:(UIViewAnimationOptionAllowUserInteraction)
                 animations:^
 {
     self.editorScrollView.contentInset = contentInsets;
     self.editorScrollView.scrollIndicatorInsets = contentInsets;
 }
                 completion:^(BOOL finished)
 {

 }];
}

目前,当 uitextfield/view 被分配为第一响应者状态时,使用此代码不会发生任何事情。插图似乎没有改变 - 我也许可以使用 contentOffset 但我必须找到刚刚成为第一响应者的原始视图的 Y。

就像我说的,在 ios7 之前,此代码有效(分配第一响应者状态时,键盘后面不会隐藏任何文本字段/视图)。我似乎遗漏了一些明显的东西,或者在 ios7 中有更好的方法吗?

【问题讨论】:

  • 有人可以详细说明为什么这被否决了吗?我提供了适用场景的所有代码,如果我遗漏了一些明显的东西,我很乐意扩展任何内容。
  • “关闭投票”队列上的评论不清楚您在问什么。他们在堆栈溢出时成群结队地狩猎。另请参阅meta.stackexchange.com/questions/9953/…
  • 我在队列中看到了这个,在我看来它是光明正大的。不知道为什么它被提名关闭。
  • 好的,谢谢...只是想确保我在提出问题时尽我所能。
  • 好吧,我对 Objective-C 或(Apple)IOS 了解不多,但这个问题对我来说似乎很清楚,而且写得很好。我也投票反对关闭。也许其中一位接近投票者可以发表评论,说明他们希望看到什么得到澄清?

标签: ios objective-c uiscrollview


【解决方案1】:

检测键盘变化和框架的更好方法。

关键是转换键盘框架:CGRect keyboardFrameInsideView = [self.view convertRect:keyboardFrame fromView:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardFrameWillChange:)
                                             name:UIKeyboardWillShowNotification
                                           object:nil];


- (void)keyboardFrameWillChange:(NSNotification *)notification
{
  CGRect keyboardFrame;
  [[notification.userInfo valueForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardFrame];

  CGRect keyboardFrameInsideView = [self.view convertRect:keyboardFrame fromView:nil];
  CGRect r = self.bodyView.frame;
  r.size.height = CGRectGetMinY(keyboardFrameInsideView) - r.origin.y;
  self.bodyView.frame = r;
}

【讨论】:

  • 这看起来很有趣,我明天在工作中尝试这个并报告。如果可行,我会接受答案
  • 这是一种不同的方式。您在没有解释原因的情况下称自己的方式“更好”。她/他正在要求 contentInsets 而你甚至没有提到它。
猜你喜欢
  • 2013-10-04
  • 2023-03-25
  • 2017-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-04
  • 2010-11-29
相关资源
最近更新 更多