UIScrollView滚动功能不起作用?

时间:2015-08-29 21:36:51

标签: ios objective-c iphone uiscrollview

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

以下是我的视图实现。 我创建了一个滚动视图,并添加了不同颜色的小块。 我从当前屏幕边界添加了一个块,以便我可以向下滚动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

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

谢谢

4 个答案:

答案 0 :(得分:1)

当您向屏幕添加滚动视图时,它应该是您要在屏幕上显示的大小。只有当你看到它时,它才会在屏幕上显示为UIView。

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

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

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

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

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

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

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

CGRectMake(0,0,30,30);

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

希望它有所帮助。

答案 1 :(得分:0)

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

_currentView.frame = self.view.bounds ;

答案 2 :(得分:0)

contentSize属性属于屏幕大小,如果您想要滚动工作,则需要更大
您应该计算scrollView内的内容大小,例如所有子视图的组合高度和它们之间的空格,或者可能是底视图的MaxY。

此外,尝试使用UITableView(或iOS 9中的UIStackView)来完成相同的行为,而无需进行任何数学运算

答案 3 :(得分:-1)

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

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

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