【问题标题】:Problem with scrollview, it scrolls more滚动视图有问题,它滚动更多
【发布时间】:2011-02-24 10:27:15
【问题描述】:

我有一个 scrollView,我想在选择 textField 时自动滚动它
(我在这里填写表格)
我正在使用以下方法滚动它

- (void)textFieldDidBeginEditing:(UITextField *)textField 
{   
[scrollView setContentOffset:CGPointMake(0,50*(textField.tag-1))];
}

现在的问题是我有超过 10 个文本字段,当我到达第七个 textField 时,scrollView 滚动更多。 我还尝试打印 CGPointMake() 的值……它显示了正确的值……但是滚动条超出了预期的范围…… 看看下面的图片

以下2张图片显示了对textFields标签的控制

但当控件到达第 7 个文本字段时,它会滚动更多

在此之后它超出了界限。

仅当我从一个文本字段移动到另一个文本字段而不按下返回按钮时才会出现此问题(我的意思是 resignFirstResponder)。但是当我按下返回按钮然后转到下一个字段时,一切正常。

谁能建议问题出在哪里..?

【问题讨论】:

  • 如果我可以提出替代解决方案:为此使用 tableview。所有这些都在表格视图中为您完成。只需制作一个自定义单元格或使用静态单元格,最后使用 scrollToRowAtIndexPath:atScrollPosition:animated: 进行滚动。

标签: iphone uiscrollview scroll uitextfield


【解决方案1】:

它不会滚动,因为它不包含足够的内容。当内容的底部边缘到达框架的底部时,它将停止。使用类似的东西

CGSize size = scrollView.contentSize;
scrollView.contentSize = CGSizeMake (size.width, size.height + ADDITIONAL_HEIGHT);

在设置滚动视图时,或者在您的 -viewDidLoad: 方法中,如果它是从 XIB 加载的。

【讨论】:

    【解决方案2】:

    它应该使正在编辑的文本字段保持在屏幕上——即自动滚动——所以你不需要做任何事情?

    但是,它可能会尝试编辑键盘后面的文本字段 - 所以更好的解决方案是:

    //Get notifications of the keyboard opening and closing
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    
    - (void)keyboardWillShow:(NSNotification *)notification {
        //Get the keyboard height
        int h = [self.view convertRect:[[[notification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue] toView:nil].size.height;
        //Change the inset of the scroll view and scroll bars
        scrollView.contentInset = scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, h, 0);
    }
    - (void)keyboardWillHide:(NSNotification *)notification {
        scrollView.contentInset = scrollView.scrollIndicatorInsets = UIEdgeInsetsMake(0, 0, 0, 0);
    }
    

    【讨论】:

      【解决方案3】:

      试试这个。声明一个变量

           CGPoint svos;
      

      在 .h 文件中并执行此操作。

             - (void)textFieldDidBeginEditing:(UITextField *)textField {
      svos = scr.contentOffset;//scr is my scroll view
      CGPoint pt;
      CGRect rc = [textField bounds];
      rc = [textField convertRect:rc toView:scr];
      pt = rc.origin;
      pt.x = 0;
      pt.y -= 60;
      [scr setContentOffset:pt animated:YES];   
      //NSLog(@"%f",pt.y);
           }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-03
        • 2011-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多