1

所以我试图让一个简单的 UIScrollView 与一堆按钮一起工作。我成功地使用以下代码完成了这项任务:

- (void)viewDidLoad
{
    [super viewDidLoad];
    [_scroller setScrollEnabled:YES];
    [_scroller setContentSize:CGSizeMake(320, 1487)];

    UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, -500, 320, 2800)];
    [imgView setBackgroundColor:[UIColor blackColor]];
    [_scroller addSubview:imgView];


    UIButton *btn1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [btn1 setTitle:@"Cool title" forState:UIControlStateNormal];
    [btn1 setFrame:CGRectMake(7, 7, 150, 160)];
    [btn1 setImage:[UIImage imageNamed:@"small.png"] forState:UIControlStateNormal];
    [btn1 addTarget:self action:@selector(btn1_m) forControlEvents:UIControlEventTouchUpInside];
    [_scroller addSubview:btn1];

但是,如果我通过界面生成器添加按钮而不是以编程方式添加它们会怎样?每当我这样做时,滚动条不再滚动!

例如,如果我在控制拖动按钮后使用以下代码:

- (IBAction)theButton:(UIButton *)sender {
    [_scroller addSubview:sender];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [_scroller setScrollEnabled:YES];
    [_scroller setContentSize:CGSizeMake(320, 1487)];
}

...滚动不起作用,我看到了按钮,但不再滚动。基本上,我只想使用界面生成器向我的应用程序添加按钮并让它们滚动,但似乎无法让它工作!

4

1 回答 1

0

当您以编程方式创建 UI 时,滚动视图的子视图如下所示:

ImageView
按钮
按钮
...

当您使用 IB 添加按钮时,您会得到以下结果:

按钮
按钮
...
ImageView

在将图像视图添加到滚动视图后放置一个断点。在 LLDB 控制台中键入:

(lldb) po _scroller.subviews

我怀疑您会在列表底部看到您的图像视图。它覆盖了您的按钮,但它正在滚动,它看起来不像它,因为它是一个大的黑色图像视图。

将您的图像视图发送到子视图列表的后面:

[_scroller sendSubviewToBack:imgView];

然后你会再次看到你的按钮。此外,完成此操作后,在 lldb 中确认您的滚动视图内容大小:

(lldb) p _scroller.contentSize

如果一切看起来都正确,它应该是滚动的。

于 2013-06-04T23:41:31.243 回答