Swift TableView scrollsToTop

时间:2014-09-20 08:30:27

标签: ios uitableview swift scroll

当用户点击标签栏时,我想让我的tableView滚动到顶部。

我在viewDidLoad方法中设置:

self.tableView.scrollsToTop = true

但它没有用。

我没有其他滚动视图。我的viewController只包含这个tableView。

我也试过这个但没有工作:

  override func scrollViewShouldScrollToTop(scrollView: UIScrollView) -> Bool {
    if scrollView == self.tableView {
        return true
    }

    else {
        return false

    }
}

我的观点:

(lldb) po [[UIWindow keyWindow] recursiveDescription]
<UIWindow: 0x156d16550; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x178247ef0>;     layer = <UIWindowLayer: 0x17803f060>>
 | <UILayoutContainerView: 0x1781fdb00; frame = (0 0; 320 568); autoresize = W+H; layer =   <CALayer: 0x1782206c0>>
  |    | <UITransitionView: 0x156d0ed30; frame = (0 0; 320 568); clipsToBounds = YES; autoresize   = W+H; layer = <CALayer: 0x178038960>>
  |    |    | <UIViewControllerWrapperView: 0x178197c40; frame = (0 0; 320 568); autoresize =  W+H; layer = <CALayer: 0x17822b7e0>>
  |    |    |    | <UILayoutContainerView: 0x1781fe200; frame = (0 0; 320 568); autoresize =  W+H; gestureRecognizers = <NSArray: 0x17805f950>; layer = <CALayer: 0x178220a40>>
 |    |    |    |    | <UINavigationTransitionView: 0x156e10fd0; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = W+H; layer = <CALayer: 0x1780368c0>>
 |    |    |    |    |    | <UIViewControllerWrapperView: 0x170197b70; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x170225040>>
 |    |    |    |    |    |    | <UITableView: 0x157844c00; frame = (0 0; 320 568); clipsToBounds = YES; autoresize = W+H; gestureRecognizers = <NSArray: 0x170248d30>; layer = <CALayer: 0x1702243a0>; contentOffset: {0, 6237}; contentSize: {320, 39000}>
 |    |    |    |    |    |    |    | <UITableViewWrapperView: 0x156e13680; frame = (0 0; 320 568); gestureRecognizers = <NSArray: 0x170248f70>; layer = <CALayer: 0x1702247e0>; contentOffset: {0, 0}; contentSize: {320, 568}>
 |    |    |    |    |    |    |    |    | <swrd.WallTableViewCell: 0x156e1f7a0; baseClass = UITableViewCell; frame = (0 6630; 320 390); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x170222500>>
 |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x170197420; frame = (0 0; 320 389.5); opaque = NO; gestureRecognizers = <NSArray: 0x1782518e0>; layer = <CALayer: 0x170232d80>>
 |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1783e0d00; frame = (0 69; 320 320); opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x1782220a0>>
 |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x156d0b3a0; frame = (61 21; 109 21); text = 'koko'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x178281d60>>
 |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1783e0e00; frame = (0 8; 48 47.5); clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x1782224e0>>
 |    |    |    |    |    |    |    |    |    |    | <UIScrollView: 0x156e20f00; frame = (0 69; 320 320); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x17024f5a0>; layer = <CALayer: 0x170232a60>; contentOffset: {0, 0}; contentSize: {0, 0}>
 |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1781fe000; frame = (233 316.5; 7 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x178226f20>>
 |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1781fa100; frame = (316.5 121; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x178227420>>
 |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x1701d5720; frame = (0 -1; 8 1); layer = <CALayer: 0x170233880>>
 |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x1781d59f0; frame = (16 389.5; 304 0.5); layer = <CALayer: 0x17803e3e0>>
 |    |    |    |    |    |    |    |    | <swrd.WallTableViewCell: 0x156d33d00; baseClass = UITableViewCell; frame = (0 6240; 320 390); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x178037ae0>>
 |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x178198d50; frame = (0 0; 320 389.5); opaque = NO; gestureRecognizers = <NSArray: 0x17824f4e0>; layer = <CALayer: 0x178229e40>>
 |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1783e0200; frame = (0 69; 320 320); opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x178229c80>>
 |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x156d265c0; frame = (61 21; 109 21); text = 'koko'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x178283930>>
 |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1781f9b00; frame = (0 8; 48 47.5); clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x178229ca0>>
 |    |    |    |    |    |    |    |    |    |    | <UIScrollView: 0x156d34020; frame = (0 69; 320 320); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x178251a00>; layer = <CALayer: 0x17822a2e0>; contentOffset: {0, 0}; contentSize: {0, 0}>
 |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1703e0a00; frame = (233 316.5; 7 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x170235840>>
 |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1703e0c00; frame = (316.5 121; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x170235900>>
 |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x1781d5900; frame = (0 -1; 8 1); layer = <CALayer: 0x17822a200>>
 |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x1701d5bd0; frame = (16 389.5; 304 0.5); layer = <CALayer: 0x170231ee0>>
 |    |    |    |    |    |    |    |    | <swrd.WallTableViewCell: 0x156d2a640; baseClass = UITableViewCell; frame = (0 5850; 320 390); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x1782281a0>>
 |    |    |    |    |    |    |    |    |    | <UITableViewCellContentView: 0x178196c00; frame = (0 0; 320 389.5); opaque = NO; gestureRecognizers = <NSArray: 0x17824ef40>; layer = <CALayer: 0x1782281c0>>
 |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1781f9a00; frame = (0 69; 320 320); opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x178228180>>
 |    |    |    |    |    |    |    |    |    |    | <UILabel: 0x156d194d0; frame = (61 21; 109 21); text = 'koko'; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x178282ee0>>
 |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1781fa500; frame = (0 8; 48 47.5); clipsToBounds = YES; opaque = NO; autoresize = RM+BM; userInteractionEnabled = NO; layer = <CALayer: 0x178228280>>
 |    |    |    |    |    |    |    |    |    |    | <UIScrollView: 0x156e22870; frame = (0 69; 320 320); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x170250020>; layer = <CALayer: 0x170232960>; contentOffset: {0, 0}; contentSize: {0, 0}>
 |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1781fad00; frame = (233 316.5; 7 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x178228160>>
 |    |    |    |    |    |    |    |    |    |    |    | <UIImageView: 0x1781fda00; frame = (316.5 121; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x178228500>>
 |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x1701d5ae0; frame = (0 -1; 8 1); layer = <CALayer: 0x1702338e0>>
 |    |    |    |    |    |    |    |    |    | <_UITableViewCellSeparatorView: 0x1701d5630; frame = (16 389.5; 304 0.5); layer = <CALayer: 0x17003e600>>
 |    |    |    |    |    |    |    | <UIRefreshControl: 0x156d0ba10; frame = (0 6301; 320 64); hidden = YES; autoresize = W; layer = <CALayer: 0x178220960>>
 |    |    |    |    |    |    |    |    | <_UIRefreshControlModernContentView: 0x156e04bd0; frame = (0 0; 320 64); clipsToBounds = YES; hidden = YES; autoresize = W; layer = <CALayer: 0x1702244c0>>
 |    |    |    |    |    |    |    |    |    | <UIView: 0x1701979d0; frame = (109.503 -18.4975; 100.995 100.995); transform = [-0.99995000041666526, 0.0099998333341665743, -0.0099998333341665743, -0.99995000041666526, 0, 0]; layer = <CALayer: 0x170224d80>>
 |    |    |    |    |    |    |    |    |    |    | <_UIRefreshControlModernReplicatorView: 0x170197aa0; frame = (-5.68434e-14 -5.41789e-14; 100 100); transform = [1, -1.1102230246251565e-15, 1.1102230246251565e-15, 1, 0, 0]; layer = <CAReplicatorLayer: 0x170224dc0>>
 |    |    |    |    |    |    |    |    |    |    |    | <UIView: 0x178198050; frame = (49 36.5; 2 7.5); layer = <CALayer: 0x178223980>>
 |    |    |    |    |    |    |    |    |    | <UILabel: 0x156d1b4c0; frame = (10 50.5025; 300 23); text = 'hey ! is there something ...'; alpha = 0; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x178281360>>
 |    |    |    |    |    |    |    | <UIImageView: 0x1701fd100; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x170225620>>
 |    |    |    |    |    |    |    | <UIImageView: 0x1783e0100; frame = (314.5 6371; 3.5 36); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x178224ac0>>
 |    |    |    |    | <UINavigationBar: 0x156e085a0; frame = (0 20; 320 44); opaque = NO; autoresize = W; gestureRecognizers = <NSArray: 0x170244ec0>; layer = <CALayer: 0x1702224e0>>
 |    |    |    |    |    | <_UINavigationBarBackground: 0x156e0ba20; frame = (0 -20; 320 64); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x170035b80>>
 |    |    |    |    |    |    | <_UIBackdropView: 0x156d19880; frame = (0 0; 320 64); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x170223c60>>
 |    |    |    |    |    |    |    | <_UIBackdropEffectView: 0x1701b66c0; frame = (0 0; 320 64); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x170223d20>>
 |    |    |    |    |    |    |    | <UIView: 0x178197d10; frame = (0 0; 320 64); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x1782210e0>>
 |    |    |    |    |    |    |    | <UIView: 0x178197de0; frame = (0 0; 320 64); alpha = 0.85; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x178221100>>
 |    |    |    |    |    |    | <UIImageView: 0x1701fa800; frame = (0 64; 320 0.5); userInteractionEnabled = NO; layer = <CALayer: 0x170222600>>
 |    |    |    |    |    | <_UINavigationBarBackIndicatorView: 0x1781fe300; frame = (8 11.5; 13 21); alpha = 0; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x178036880>>
 |    | <UITabBar: 0x156d0fe50; frame = (0 519; 320 49); autoresize = W+TM; layer = <CALayer: 0x170222ea0>>
 |    |    | <_UITabBarBackgroundView: 0x1781fc300; frame = (0 0; 320 49); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x178223140>>
 |    |    |    | <_UIBackdropView: 0x156d1d320; frame = (0 0; 320 49); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <_UIBackdropViewLayer: 0x1782231a0>>
 |    |    |    |    | <_UIBackdropEffectView: 0x1781b7f40; frame = (0 0; 320 49); clipsToBounds = YES; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CABackdropLayer: 0x1782231c0>>
 |    |    |    |    | <UIView: 0x178197eb0; frame = (0 0; 320 49); opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x1782231e0>>
 |    |    |    |    | <UIView: 0x178197f80; frame = (0 0; 320 49); alpha = 0.85; opaque = NO; autoresize = W+H; userInteractionEnabled = NO; layer = <CALayer: 0x178223200>>
 |    |    | <UITabBarButton: 0x156d0ffe0; frame = (2 1; 103 48); opaque = NO; layer = <CALayer: 0x17803fb60>>
 |    |    |    | <UITabBarSwappableImageView: 0x156d11530; frame = (38.5 5.5; 25.5 25); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17803fb80>>
 |    |    |    | <UITabBarButtonLabel: 0x156d103e0; frame = (37.5 35; 28 12); text = 'Home'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x17809f180>>
 |    |    | <UITabBarButton: 0x156d13080; frame = (109 1; 102 48); opaque = NO; layer = <CALayer: 0x17803ffe0>>
 |    |    |    | <UITabBarSwappableImageView: 0x156d136e0; frame = (38.5 7.5; 25 20.5); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x178220000>>
 |    |    |    | <UITabBarButtonLabel: 0x156d13550; frame = (37 35; 28 12); text = 'Photo'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x17809f540>>
 |    |    | <UITabBarButton: 0x156d14660; frame = (215 1; 103 48); opaque = NO; layer = <CALayer: 0x1782203c0>>
 |    |    |    | <UITabBarSwappableImageView: 0x156d14820; frame = (39 6; 24 24); opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x1782203e0>>
 |    |    |    | <UITabBarButtonLabel: 0x156d14b30; frame = (36.5 35; 29.5 12); text = 'Profile'; opaque = NO; userInteractionEnabled = NO; layer = <_UILabelLayer: 0x17809f810>>
 |    |    | <UIImageView: 0x1781fec00; frame = (0 -0.5; 320 0.5); autoresize = W; userInteractionEnabled = NO; layer = <CALayer: 0x1782234c0>>

2 个答案:

答案 0 :(得分:1)

从用户点击功能

中调用此功能
func scrollToFirstRow()
{
    self.tableView?.scrollToRowAtIndexPath(0, atScrollPosition: UITableViewScrollPosition.None, animated: true)
}

答案 1 :(得分:1)

使用setContentOffset(_:animated:) UIScrollView 方法(自iOS 2.0开始提供)。 由于UITableViewUICollectionView继承自UIScrollView,因此此方法也适用于这两个子类。

示例用法tableView.setContentOffset(CGPoint(x: 0.0, y: 0.0), animated: true)