困惑为什么我的UISCrollView的框架为空

时间:2011-11-06 09:51:29

标签: iphone ios

我从一个空项目开始,并添加了一个视图控制器及其笔尖。在nib内部,有一个视图,其中UIScrollView作为视图的子项。在scrollview中,我有多个资源,如文本字段,标签和按钮。

当键盘出现时,我希望我的scrollview向上移动。我查看了如何执行此操作的stackoverflow。我基本上复制了代码并试图理解它。但是,观点仍然没有提升。所以一些调试语句的时间......

我的UIScrollView被连接起来(IBOutlet)到RootViewController,可以从那里访问。我尝试打印出我的scrollView(实例名称),然后我得到了一个对象。但是,当我尝试打印出scrollView.frame ....我得到了null ...有没有人知道为什么会这样?

以下是一些带有一些调试语句的代码片段

- (void) moveScrollView:(NSNotification *) notification up: (BOOL) upFlag{
    NSDictionary * userInfo = [notification userInfo];

    NSTimeInterval animationDuration;
    UIViewAnimationCurve animationCurve;
    CGRect keyboardEndFrame;

    [[userInfo objectForKey:UIKeyboardAnimationCurveUserInfoKey] getValue:&animationCurve];
    [[userInfo objectForKey:UIKeyboardAnimationDurationUserInfoKey] getValue:&animationDuration];
    [[userInfo objectForKey:UIKeyboardFrameEndUserInfoKey] getValue:&keyboardEndFrame];

    [UIView beginAnimations:nil context:nil];
    [UIView setAnimationDuration:animationDuration];
    [UIView setAnimationCurve:animationCurve];

    CGRect newFrame = scrollView.frame;
    CGRect keyboardFrame  = [self.view convertRect:keyboardEndFrame toView:nil];
    NSLog(@"scrollView: %@", scrollView);
    NSLog(@"frame: %@", scrollView.frame);
    NSLog(@"Old Height: %@", scrollView.frame.size.height);

    newFrame.size.height -= keyboardFrame.size.height * (upFlag ? 1 : -1);
    NSLog(@"New Height: %@", newFrame.size.height);
    scrollView.frame = newFrame;

    [UIView commitAnimations];
}

- (void) keyboardShow:(NSNotification *) notification{
    NSLog(@"Keyboard Show");
    [self moveScrollView: notification up:YES];
}

Nib

3 个答案:

答案 0 :(得分:3)

您无法使用%@打印框架。 %@打印Objective C对象; frame不是Objective C对象。它是一个C结构,CGRect。单独打印其组件,如下所示:

NSLog(@"frame: (%0f %0f; %0f %0f)",
               scrollView.frame.origin.x, scrollView.frame.origin.y,
               scrollView.frame.size.width, scrollView.frame.size.height);

我认为使用调试器更有效。在调试器中,您可以使用

po object

打印Objective C对象,

print (CGRect)[scrollView frame]

打印框架。

顺便说一句,在Apple的文档中调整键盘滚动视图的推荐方法是设置内容插入,而不是更改框架。我也开始改变框架并且遇到了奇怪的问题。

答案 1 :(得分:1)

打印框架

NSLog(@"%@", NSStringFromRect(frame));`

答案 2 :(得分:0)

您确定在加载视图时调用moveScrollView方法吗?

尝试在-viewDidLoad方法中设置断点,并确保在moveScrollView方法之前调用它。

希望这有帮助, 文森特