代码之家  ›  专栏  ›  技术社区  ›  Ankit Sachan

滚动到scrollview/scrollview中的特定文本字段当键盘在屏幕上时停止滚动

  •  3
  • Ankit Sachan  · 技术社区  · 16 年前

    我被困在这里,

    为了防止这种情况发生,我按照UICatalog示例进行了如下操作

    -(void)textFieldDidBeginEditing:(UITextField *)sender
    {
    
    if (sender.frame.origin.y>109) {
        moveScrollViewUpBy=(sender.frame.origin.y-109+10);
    
        [self viewMovedUp:YES];
    }
    }
    
    
    -(void)viewMovedUp:(BOOL)movedUp
    {
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:0.3];
    
    CGRect rect = formScrollView.frame;
    if (movedUp)
    {
        if(rect.origin.y == 0.0f){
            rect.origin.y -= kOFFSET_FOR_KEYBOARD;
            rect.size.height += kOFFSET_FOR_KEYBOARD;
        }
    }
    else
    {
        if(rect.origin.y != 0.0f){
            rect.origin.y += kOFFSET_FOR_KEYBOARD;
            rect.size.height -= kOFFSET_FOR_KEYBOARD;
        }
    }
    self.formScrollView = rect;
    
    
    [UIView commitAnimations];
    }
    

    #define kOFFSET_FOR_KEYBOARD    160.0
    

    但这会将滚动视图向上移动,

    我希望当我在滚动视图中点击下面的文本字段时。。。滚动视图滚动,文本字段出现。。。。

    2 回复  |  直到 16 年前
        1
  •  2
  •   Ben Gottlieb    16 年前

    您可能只想设置scrollView的contentOffset属性,而不是调整其边界。

        2
  •  1
  •   user668876 bentford    15 年前

    - (void)textViewDidBeginEditing:(UITextView *)textView {
    
        keyboardShowing = YES; //helper ivar
        [self sizeToOrientation];
        [self.scrollView scrollRectToVisible:textView.frame animated:YES];
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
        keyboardShowing = NO;
        [self sizeToOrientation];
    }
    

    助手方法:

    //fit to the appropriate view sizes
    - (void)sizeToOrientation {
        CGSize size;
        if( keyboardShowing )
            size = CGSizeMake(320, 190); //make room for keyboard
        else
            size = CGSizeMake(320, 420); //full height with tabbar on bottom
    
        self.scrollView.frame = CGRectMake(0, 0, size.width, size.height);
    }
    

    这对我很有效。