Ios 在UIScrollView中嵌入UIView时使用Autolayout

Ios 在UIScrollView中嵌入UIView时使用Autolayout,ios,objective-c,iphone,uiscrollview,Ios,Objective C,Iphone,Uiscrollview,我在滚动视图中嵌入了一个视图。我已经编写了这样的代码,当光标被放置在视图中被键盘隐藏的文本字段中时,屏幕将重新调整,使文本字段不再隐藏。我正在使用自动布局来完成此操作 我的问题是,当我将视图放在视图控制器中我想要的位置时,当我运行模拟器时,上面会有很多额外的空白。但当键盘打开,屏幕重新绘制时,我可以向上滚动,视图控制器不再有额外的空白 如果我调整视图,使其不存在任何空白,使其显示在情节提要上,那么当键盘出现时,我无法滚动到视图顶部 我假设这与视图在滚动视图中的居中方式有关,但我在“大小检查器”(

我在滚动视图中嵌入了一个视图。我已经编写了这样的代码,当光标被放置在视图中被键盘隐藏的文本字段中时,屏幕将重新调整,使文本字段不再隐藏。我正在使用自动布局来完成此操作

我的问题是,当我将视图放在视图控制器中我想要的位置时,当我运行模拟器时,上面会有很多额外的空白。但当键盘打开,屏幕重新绘制时,我可以向上滚动,视图控制器不再有额外的空白

如果我调整视图,使其不存在任何空白,使其显示在情节提要上,那么当键盘出现时,我无法滚动到视图顶部

我假设这与视图在滚动视图中的居中方式有关,但我在“大小检查器”(Size Inspector)中尝试了多次调整约束,但无法解决此问题。如果可能的话,我真的很想在故事板和代码中解决这个问题

代码如下:

- (void) keyboardDidShow:(NSNotification *)notification
{
    NSDictionary* info = [notification userInfo];
    CGRect kbRect = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    kbRect = [self.view convertRect:kbRect fromView:nil];

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbRect.size.height, 0.0);
    self.scrollView.contentInset = contentInsets;
    self.scrollView.scrollIndicatorInsets = contentInsets;

    CGRect aRect = self.view.frame;
    aRect.size.height -= kbRect.size.height;
    if (!CGRectContainsPoint(aRect, self.activeField.frame.origin) ) {
        [self.scrollView scrollRectToVisible:self.activeField.frame animated:YES];
    }
}

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

结果是我将EdgeInsets值设置得太高了。。。当我从

UIEdgeInsets contentInsets=UIEdgeInsetsMake0.0,0.0,kbRect.size.height,0.0

UIEdgeInsets contentInsets=UIEdgeInsetsMake60.0,0.0,kbRect.size.height,0.0


定位得到了改进。

添加屏幕快照我没有发布屏幕快照的权限,但它是视图控制器顶部滚动视图顶部的视图。以下是视图中的约束:高度:358,尾随空间到:Superview,前导空间到:Superview,将中心X对齐到:Superview,底部空间到:Superview等于:100,顶部空间到:Superview等于15