UIScrollView 不会滚动,从未调用过委托方法

Posted

技术标签:

【中文标题】UIScrollView 不会滚动,从未调用过委托方法【英文标题】:UIScrollView won't scroll, delegate methods never called 【发布时间】:2015-08-21 01:57:24 【问题描述】:

我在UIScrollView 的子视图中有几个UILabel。我相信我已经将它设置为与我在另一个视图控制器中的功能 UIScrollView 完全一样,只有这个不会滚动。 contentSize 设置为 大于 比滚动视图 frame 大小和滚动视图 delegate 设置为 self。视图在 Interface Builder 中连接起来,UIScrollview 启用了滚动、反弹、用户交互和多点触控。孩子UIView 也启用了用户交互。这是我的代码:

.h 文件

#import <UIKit/UIKit.h>

@interface CreditsViewController : UIViewController <UIScrollViewDelegate>

@end

.m 文件

#import "CreditsViewController.h"

@interface CreditsViewController ()
@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) IBOutlet UIView *contentView;

@end

@implementation CreditsViewController

- (void)viewDidLoad 
    [super viewDidLoad];
    self.scrollView.delegate = self;
    _scrollView.contentSize = _contentView.frame.size;
    NSLog(@"scrollview frame size, contentview frame size: %f x %f, %f x %f", _scrollView.frame.size.width, _scrollView.frame.size.height, _contentView.frame.size.width, _contentView.frame.size.height);

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView 
NSLog(@"in scrollViewWillBeginDragging");


- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
    NSLog(@"in scrollViewDidScroll");


- (void)didReceiveMemoryWarning 
    [super didReceiveMemoryWarning];

@end

我得到 scrollview frame size, contentview frame size: 240.000000 x 128.000000, 320.000000 x 568.000000 作为日志打印输出,但我从未从委托方法中获得语句。滚动视图是视图控制器的唯一子项,因此当我尝试滚动时它应该接收触摸事件。怎么回事?

【问题讨论】:

检查插座连接 contentSize 有多大?只有当内容大小大于滚动视图大小时它才会滚动 contentSize为320x568,大于scrollview frame size (240x128)。 检查您的 XIB 中是否勾选了“用户交互启用” 是的,网点是正确的,并且用户交互已启用。 【参考方案1】:

您需要实现 viewForZoomingInScrollView: 并返回您的 _contentView。

【讨论】:

我不希望用户能够缩放,所以实际上我会返回 nil,但这并没有解决问题。 对于不缩放设置 mininumScrollViewScale 和 maximumZoomScale = 1 的平移。我认为不赞成是因为如果在 IB 中正确设置了滚动视图和内容视图,那么您不需要 viewForZoomingInScrollView。如果您在代码中构建 UI,则需要此委托方法,但不要从中返回 nil。您确实需要按照 Fonix 的建议将 contentSize 设置为大于 scrollView 的可见区域。应该这样做。 您对内容视图有限制吗? 无限制。我已经在 IB 中构建了我的 UI,并且只添加了委托,以便能够查看方法是否被调用以试图找出它为什么不起作用。

以上是关于UIScrollView 不会滚动,从未调用过委托方法的主要内容,如果未能解决你的问题,请参考以下文章

UIWebView 中的 UIScrollView 的委托方法未调用水平滚动

UIScrollView 中的水平滑动

UIScrollView 缩放抖动效果

尽管提供了代表,uiscrollview 不滚动

UICollectionViewFlowLayout 委托 insetForSectionAt 从未调用

Objective-C UIScrollView 不滚动