我的桌面视图在我的iPad应用程序(OS X 10.7.3,Xcode 4.3.2)中自动向下滚动,并且不确定在哪里查找原因。情况如下:
UITableView填充整个屏幕,大多数单元格都是固定高度的单元格。一个例外是包含UITextView的单元格,并且具有动态高度(换句话说,单元格的高度会调整以适应文本的数量)。
如果表格恰好在表格视图位于顶部时切断了动态高度单元格,则问题就会出现。首次加载视图时,表格将正常绘制,只有部分UITextView单元格可见。但是,如果我显示一个UIPopoverController,我需要在解除弹出窗口后执行reloadData,当我这样做时,表视图将向下滚动,足以显示所有UITextView。 (不是包含UITextView的单元格,只是UITextView。该表是一个分组表,UITextView单元格是该部分中唯一的单元格,因此在此幻像滚动后仍然看不到圆形底边。)
我在应用程序中看不到滚动表格视图或设置内容偏移量的任何代码,因此我对可能导致此问题的原因感到困惑。
为了尝试缩小它,我设置了我的视图以尊重UIScrollViewDelegate,如果我在scrollViewDidScroll:方法中放置一个断点,程序确实在弹出窗口消失后停止并给我以下回溯:
(lldb) bt
* thread #1: tid = 0x1f03, 0x0005245f MyApp`-[ContactDisplayViewController scrollViewDidScroll:] + 31 at ContactDisplayViewController.m:1143, stop reason = breakpoint 3.1
frame #0: 0x0005245f MyApp`-[ContactDisplayViewController scrollViewDidScroll:] + 31 at ContactDisplayViewController.m:1143
frame #1: 0x017e3494 UIKit`-[UIScrollView setContentOffset:] + 521
frame #2: 0x0180804d UIKit`-[UITableView setContentOffset:] + 334
frame #3: 0x017d495e UIKit`-[UIScrollViewScrollAnimation setProgress:] + 523
frame #4: 0x0183d234 UIKit`-[UIAnimator(Static) _advance:] + 255
frame #5: 0x02c013a3 GraphicsServices`HeartbeatTimerCallback + 35
frame #6: 0x023278c3 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
frame #7: 0x02328e74 CoreFoundation`__CFRunLoopDoTimer + 1220
frame #8: 0x022852c9 CoreFoundation`__CFRunLoopRun + 1817
frame #9: 0x02284840 CoreFoundation`CFRunLoopRunSpecific + 208
frame #10: 0x02284761 CoreFoundation`CFRunLoopRunInMode + 97
frame #11: 0x02bfe1c4 GraphicsServices`GSEventRunModal + 217
frame #12: 0x02bfe289 GraphicsServices`GSEventRun + 115
frame #13: 0x017a4c93 UIKit`UIApplicationMain + 1160
frame #14: 0x0000263d MyApp`main + 125 at main.m:14
如果我在该方法中打印出scrollView,它会显示UITableView处于运动状态(不确定contentOffset的来源):
Printing description of scrollView:
<UITableView: 0xc3ed400; frame = (0 99; 383 817); clipsToBounds = YES;
autoresize = W+RM+H; layer = <CALayer: 0x7bf1a40>; contentOffset: {0, 14}>
此虚拟滚动显示在设备和模拟器上,以及iOS 4.3,5.0和5.1中。有没有人有任何想法?
答案 0 :(得分:1)
我有一种含糊不清的回忆,以前对此有所了解。由于UITableViews是UIScrollView子类,因此UITextViews它可能会变得混乱。
猜测或许在重新加载之前尝试更改TextView上的某些属性,例如禁用滚动?
[myTextView setScrollEnabled:NO];
答案 1 :(得分:1)
当UITextView成为FirstFirstResponder(我相信iOS 3)时,如果它在UIScrollView / UITableViewController中,那么该滚动视图将由iOS自动滚动以确保UITextView可见。
要获得解决方法,请查看:Disable UIScrollView scrolling when UITextField becomes first responder
答案 2 :(得分:0)
我将UIScrollView
子类(在我的情况下为子类UITextField
)子类化,并确保我不接受“任意”内容偏移:
override var contentOffset: CGPoint {
set {
let maxContentOffsetY = max(self.contentSize.height - self.frame.size.height, 0.0)
super.contentOffset.y = min(newValue.y, maxContentOffsetY)
}
get {
return super.contentOffset
}
}