【问题标题】:UIScrollView autoscrolls after I set contentOffset设置 contentOffset 后 UIScrollView 自动滚动
【发布时间】:2011-08-25 17:40:23
【问题描述】:

我正在尝试在键盘启动时浏览 UITextFields。我有一个带有 UIScrollView 的 xib 设置,里面有文本字段。当 UITextField 设置为第一响应者时,我的 contentOffset.y 会发生变化。前两个文本字段反应正常,但之后滚动视图将跳过选定的文本字段,并且在我得到的列表中越往下越差。我已经设置了 NSLog 语句和断点,这些断点向我表明,当我第一次选择文本字段时,使用了正确的 y 值,但是在几次之后直接调用了滚动视图的 scrollViewDidScroll 方法,运行通过了文本字段。

-(void)textFieldDidBeginEditing:(UITextField *)textField{  
  textField.inputAccessoryView = accessoryBar;
  int offset = 30;
  [scrollView setContentOffset:CGPointMake(0, textField.frame.origin.y -offset) ];
}

-(void)textFieldDidEndEditing:(UITextField *)textField{  
  [scrollView setContentOffset:CGPointMake(0, 0)];
}  

-(BOOL) textFieldShouldReturn:(UITextField*) textField {
  [textField resignFirstResponder]; 
  return YES;
}

我在 xcode 4.1 lion 上运行 iOS 4.3

【问题讨论】:

  • 您是否在 scrollViewDidScroll 中做任何可以改变这一点的事情?还是您在其他任何地方设置内容偏移量?
  • 除了使用 NSLog 打印偏移调用之外,我没有使用 scrollViewDidScroll。"NSLog(@"scrollview:offsetY:%f height:%f", scrollView.contentOffset.y,scrollView.contentSize.高度);"
  • 你的偏移量总是30吗?并且一定要像 Mundi 所说的那样记录 textField 框架。
  • 查看以下链接以获取帮助。 [您的问题解决方案在这里..][1] [1]:stackoverflow.com/questions/7193787/… 谢谢,
  • scrollView 的 contentOffset.y 总是设置为 textField.frame.origin.y - 30

标签: iphone cocoa-touch uiscrollview ios4


【解决方案1】:

也许你的accessoryBar 搞砸了? inputAccessoryView 属性通常是只读的,所以我假设你已经继承了UITextField。试试不带accessoryBar 的代码。

【讨论】:

  • 我注释掉了 accessoryBar 分配,我得到了相同的结果
  • 您是否也 NSLog 您的 textField 框架?听起来它们可能在不同的坐标中......一切都如预期的那样?
  • 这里是在 scrollViewDidScroll 上点击的输出第三个字段的一些示例: scrollview:offsetY:0.000000 textFieldDidBeginEditting: textFieldY:147.000000 30 BMAG_KeyRing[5111:f503] scrollViewDidScroll: scrollview:offsetY:117.000000 第四个字段 scrollViewDidScroll:scrollview :offsetY:0.000000 textFieldDidBeginEditting: textFieldY:206.000000 30 scrollViewDidScroll: scrollview:offsetY:176.000000 scrollViewDidScroll: scrollview:offsetY:177.000000 ..x11 scrollViewDidScroll: scrollview:offsetY:191.000000 ...
  • 我看不到任何 textField 框架。试试NSLog(@"textField.frame: %@", NSStringFromCGRect(textField.frame));
  • 我用您的 NSLog 结果点击了第三和第四个字段 'textField.frame: {{20, 206}, {255, 31}}', 'textField.frame: {{20, 265 }, {255, 31}}',它们完全匹配 xib 框架
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多