UIScrollView 滚动功能不起作用?
UIScrollView scroll functionality not working?
我是 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
使用此实现我根本无法滚动。我错过了什么吗?
谁能解释一下我的代码有什么问题。
谢谢
首先,您尝试做的事情应该使用 UITableView 来完成。我不确定你为什么要这样做。
无论如何,您是否也尝试设置 UIScrollView 的 contentSize 属性?
您的滚动视图不会滚动,因为它的框架与其内容大小一样大。在将滚动视图添加为子视图之前,在视图控制器中添加此行:
_currentView.frame = self.view.bounds ;
contentSize
属性 应该 而不是 屏幕尺寸,它需要 更大 如果你想滚动工作。
您应该计算 scrollView
内内容的大小,例如所有子视图的组合高度和它们之间的空间,或者底部视图的 MaxY。
此外,尝试使用 UITableView
(或 iOS 9 中的 UIStackView
)来完成相同的行为,而无需进行任何数学运算
当您将滚动视图添加到屏幕时,它应该是您想要在屏幕上显示的大小。只有当你看到它时,它才会简单地作为一个 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);
这将在滚动视图的左上角添加一个大小为 30X30 的视图。
希望对您有所帮助。
我是 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
使用此实现我根本无法滚动。我错过了什么吗? 谁能解释一下我的代码有什么问题。
谢谢
首先,您尝试做的事情应该使用 UITableView 来完成。我不确定你为什么要这样做。
无论如何,您是否也尝试设置 UIScrollView 的 contentSize 属性?
您的滚动视图不会滚动,因为它的框架与其内容大小一样大。在将滚动视图添加为子视图之前,在视图控制器中添加此行:
_currentView.frame = self.view.bounds ;
contentSize
属性 应该 而不是 屏幕尺寸,它需要 更大 如果你想滚动工作。
您应该计算 scrollView
内内容的大小,例如所有子视图的组合高度和它们之间的空间,或者底部视图的 MaxY。
此外,尝试使用 UITableView
(或 iOS 9 中的 UIStackView
)来完成相同的行为,而无需进行任何数学运算
当您将滚动视图添加到屏幕时,它应该是您想要在屏幕上显示的大小。只有当你看到它时,它才会简单地作为一个 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);
这将在滚动视图的左上角添加一个大小为 30X30 的视图。
希望对您有所帮助。