UIScrollView 滚动功能不起作用?

Posted

技术标签:

【中文标题】UIScrollView 滚动功能不起作用?【英文标题】:UIScrollView scroll functionality not working? 【发布时间】:2015-08-29 21:36:50 【问题描述】:

我是 ios 应用程序开发的新手。我正在尝试实现滚动视图。我根本无法滚动。

以下是我的视图实现。 我创建了一个滚动视图并在其中添加了不同颜色的小块。 我在当前屏幕边界之外添加了一个块,以便我可以向下滚动 UIScrollView 并查看它。

@implementation CustomView

- (instancetype)init

    self = [super init];
    if (self) 
    CGRect screenRect = CGRectMake(70, 100, 250, 800);
    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:screenRect];
    scrollView.scrollEnabled = YES;
    [scrollView setBackgroundColor:[UIColor yellowColor]];
    [scrollView setAlpha:0.2];
    [self addSubview:scrollView];

    CGRect temp = CGRectMake(100, 150, 10, 10);
    UIView *firstView = [[UIView alloc] initWithFrame:temp];
    [firstView setBackgroundColor:[UIColor redColor]];
    [scrollView addSubview:firstView];

    temp = CGRectMake(150, 200, 10, 10);
    UIView *secondView = [[UIView alloc] initWithFrame:temp];
    [secondView setBackgroundColor:[UIColor greenColor]];
    [scrollView addSubview:secondView];

    temp = CGRectMake(200, 750, 10, 10);
    UIView *thirdView = [[UIView alloc] initWithFrame:temp];
    [thirdView setBackgroundColor:[UIColor orangeColor]];
    [scrollView addSubview:thirdView];

    scrollView.contentSize = screenRect.size;

return self;

@end

我正在使用我之前在视图控制器中创建的视图。我将它添加到我的视图控制器的视图中。

@interface ViewController ()

@property (nonatomic, readonly) CustomView *currentView;

@end

@implementation ViewController

- (void)viewDidLoad 
[super viewDidLoad];

_currentView = [[CustomView alloc] init];
[self.view addSubview:_currentView];


- (void)didReceiveMemoryWarning 
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.

@end

我根本无法使用此实现滚动。我错过了什么吗? 有人可以解释一下我的代码有什么问题吗?

谢谢

【问题讨论】:

【参考方案1】:

当您向屏幕添加滚动视图时,它应该是您希望在屏幕上显示的大小。只有当您查看它时,它才会以 UIView 的形式显示在屏幕上。

UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame: CGRectMake(20, 20, 250, 250)];

上述初始化将为您提供一个大小为 250X250 的滚动视图,放置在 (20,20) 位置。

对于滚动,您需要定义滚动视图的内容大小。 此内容大小应大于您的滚动视图大小,否则您将无法区分它。 contentsize 的大小应根据您要放入其中的内容来决定。

例如,如果您在滚动视图中添加的三个视图的总宽度为 500,高度为 300,那么您的内容大小应仅等于该值。

[scrollView setContentSize:CGSizeMake(500, 300)];

这将允许您在滚动视图内滚动。

您添加到滚动视图的内容也应该添加,考虑到滚动视图的左上角作为 (0,0) 位置。 因此,如果您想在 scrollView 的左上角显示某些内容,那么该特定视图的框架尺寸应该是这样的

CGRectMake(0,0,30,30);

这将在 scrollView 的左上角添加一个大小为 30X30 的视图。

希望对你有帮助。

【讨论】:

【参考方案2】:

您的滚动视图不会滚动,因为它的框架与其内容大小一样大。在将滚动视图添加为子视图之前,在视图控制器中添加此行:

_currentView.frame = self.view.bounds ;

【讨论】:

将框架设置为当前视图边界没有帮助。它仍然无法正常工作。 它有效。我已经测试过了。该行必须在 [self.view addSubview:_currentView]; 之前插入【参考方案3】:

contentSize 属性应该是屏幕的大小,如果您想要滚动工作,它需要更大。 您应该计算scrollView 中内容的大小,例如所有子视图的组合高度和它们之间的空间,或者可能是底部视图的 MaxY。 此外,尝试使用 UITableView(或 iOS 9 中的 UIStackView)来完成相同的行为,而无需进行任何数学运算

【讨论】:

我已将 contentSize 设置为 250 * 800 rect。 contentSize height(800) 大于屏幕高度。【参考方案4】:

首先,您要做的事情应该使用 UITableView 来完成。我不知道你为什么要这样做。

无论如何,您是否尝试设置 UIScrollViewcontentSize 属性?

https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIScrollView_Class/#//apple_ref/occ/instp/UIScrollView/contentSize

【讨论】:

滚动视图是滚动视图。要在其内容的不同位置插入三个视图,为什么说表格视图更好? 好吧,我的错。我应该更仔细地查看坐标。我的意思是当有人试图使用 UIScrollView 和自定义子视图(不知何故试图重新创建像 UI 一样的 tableView)来创建行时,我在其他地方看到过这种错误。

以上是关于UIScrollView 滚动功能不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

应用商店更新后 UIScrollView 不起作用

UIScrollView 水平滚动不起作用

iOS 滚动视图不起作用

UIScrollView中的UITableView,滚动不起作用

UITextView 在分页 UIScrollView 内滚动不起作用

Swift - UIScrollView 滚动动画在 viewDidLoad() 中不起作用