11

最近我下载了 Xcode 4.5(iOS 6),但是当我试图继续我的一个项目时,我注意到 UIScrollView 不能正常工作,让我更清楚地解释一下:

我创建了 UIScrollView 并使用以下代码添加了初始化它:

-(void)viewDidLoad{

    [mainScrollView setScrollEnabled:YES];
    mainScrollView.contentSize = CGSizeMake(480, 0);

    [super viewDidLoad];

}

在我打开我的 XIB 并将其链接mainScrollView到 UIScrollView 之后,在我将一些 UIButton 添加到 scrollView 之后。当我构建项目时,它mainScrollView正在滚动但按钮没有出现,我的意思是,我只能看到已经存在的按钮屏幕上。我在做什么错?如何设置 UIScrollView?

4

6 回答 6

39

对于xcode 4.5,如果您正在使用scrollView,则必须取消选中use AutoLayout文件检查器中的“”。

或者如果你想“使用AutoLayout”,那么在.m(implementation) 文件中添加这个

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    theScroller.contentSize=CGSizeMake(1024.0,1300.0);
}
于 2012-09-30T11:18:12.907 回答
4

也许您只是输入错误,但您CGSize的高度为 0?

于 2012-06-25T00:05:16.430 回答
4

您可以使用 XCode 4.5 中的自动布局来做到这一点但是您在 viewDidAppear 中配置 UIScrollView

我也在带有图像的静态 UITableView 中执行此操作。

将您的图像命名为 timg1.png、timg2.png....

在你的 ControllerView.h 文件中

@property (weak, nonatomic) IBOutlet UIScrollView *Sv1;
@property (weak, nonatomic) IBOutlet UIPageControl *Pc1;

在您的 ControllerView.m 文件中

-(void)viewDidAppear:(BOOL)animated
{

    //Scrollview
    Sv1.delegate = self;

    Sv1.contentSize = CGSizeMake(260, 176);

    [self.Sv1 setBackgroundColor:[UIColor clearColor]];
    // ScrollViewGarten.frame = CGRectMake(9, 11, 283, 170);
    [Sv1 setCanCancelContentTouches:NO];

    Sv1.multipleTouchEnabled = NO;
    Sv1.indicatorStyle = UIScrollViewIndicatorStyleWhite;
    Sv1.clipsToBounds = YES;
    Sv1.scrollEnabled = YES;
    Sv1.pagingEnabled = YES;

    NSUInteger nimagesTextil = 0;
    CGFloat cxTextil = 0;
    for (; ; nimagesTextil++) {
        NSString *imageNameTextil = [NSString stringWithFormat:@"timg%d.png", (nimagesTextil + 1)];
        UIImage *imageTextil = [UIImage imageNamed:imageNameTextil];
        if (imageTextil == nil) {
            break;
        }
        UIImageView *imageViewTextil = [[UIImageView alloc] initWithImage:imageTextil];

        CGRect rect = imageViewTextil.frame;
        rect.size.height = 176;
        rect.size.width = 260;
        rect.origin.x = ((Sv1.frame.size.width - imageTextil.size.width) / 2) + cxTextil;
        rect.origin.y = ((Sv1.frame.size.height - imageTextil.size.height) / 2);

        imageViewTextil.frame = rect;

        [Sv1 addSubview:imageViewTextil];

        cxTextil += Sv1.frame.size.width;
    }
    self.Pc1.numberOfPages = nimagesTextil;
    [Sv1 setContentSize:CGSizeMake(cxTextil, [Sv1 bounds].size.height)];
    self.Pc1.currentPage = 0;

}
于 2012-10-31T15:02:45.553 回答
3

如果您想解决此问题并使用 AutoLayout,请将您的contentSize代码移至该viewDidAppear方法。我在这个 SO 问题中找到了答案:Embed ImageView in ScrollView with Auto Layout on iOS 6

于 2012-10-05T10:15:24.823 回答
3

我相信这是 Xcode 4.5 或 iOS 6 SDK 的错误。我修复它的方法是以编程方式将子视图添加到我的 UIScrollView 中。

因此,您必须执行以下操作:

- (void)viewDidLoad {

    [super viewDidLoad];

    UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(400.0f, 10.0f, 60.0f, 30.0f);
    [mainScrollView addSubView:button];
    mainScrollView.contentSize = CGSizeMake(480.0f, mainScrollView.frame.size.height);
}

试试这个,让我知道这是否对你有用。

如果你有旧版本的 Xcode,复制代码和那里的 nib 以查看结果可能是个好主意。

于 2012-08-18T19:57:20.030 回答
0

我会这样做:

-(void)viewDidLayoutSubviews
{
[self.scrollview setScrollEnabled:YES];
[self.scrollview setUserInteractionEnabled:YES];
[self.scrollview setContentSize:CGSizeMake(320, _y)];
[self.scrollview setAlwaysBounceVertical:YES];
}

我使用类变量 _y 因为我将所有子视图高度添加到它。

于 2013-06-12T08:30:21.620 回答