2012-06-24 19 views
11

Gần đây tôi đã tải về Xcode 4.5 (iOS 6), nhưng khi cố gắng để tiếp tục một trong những dự án của tôi, tôi nhận thấy rằng các UIScrollView không hoạt động đúng, hãy để tôi giải thích rõ ràng hơn:UIScrollView trong iOS 6

tôi 've tạo UIScrollView và thêm vào các khởi tạo nó bằng cách sử dụng đoạn mã sau:

-(void)viewDidLoad{ 

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

    [super viewDidLoad]; 

} 

sau khi tôi mở XIB của tôi và liên kết mainScrollView đến một UIScrollView, sau khi tôi đã thêm một số của UIButton đến scrollView.When tôi đã xây dựng dự án mainScrollView đang cuộn nhưng các nút không hiển thị, ý tôi là, tôi chỉ có thể thấy nút đã có trên scre vi. Tôi đang làm gì sai? Làm cách nào để thiết lập UIScrollView?

+0

Tôi vừa gặp sự cố tương tự. Đây có phải là lỗi trong SDK iOS6 không? –

Trả lời

4

Có thể bạn vừa nhập sai, nhưng CGSize của bạn có chiều cao bằng 0?

+0

Chỉ cần tắt tính năng cuộn dọc! – Mateus

+1

Bạn không thể tắt nó trong IB? Hoặc chỉ sử dụng các thuộc tính? Đặt chiều rộng CGSize thành 0 nghe như một ý tưởng tồi. – DGund

+0

Nếu bạn muốn tắt tính năng cuộn dọc, hãy đặt chiều cao nội dung bằng với kích thước của chế độ xem cuộn và tắt phản xạ thẳng đứng. –

3

Tôi tin rằng đây là lỗi với Xcode 4.5 hoặc SDK iOS 6. Cách tôi cố định nó là bằng cách thêm các subviews vào UIScrollView của tôi theo chương trình.

Vì vậy, bạn sẽ phải làm một cái gì đó như:

- (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); 
} 

Hãy thử điều này và cho tôi biết nếu điều này làm việc cho bạn.

Nếu bạn có phiên bản Xcode cũ, bạn nên sao chép mã và ngòi bút ở đó để xem kết quả.

39

Đối với xcode 4.5, Nếu bạn đang sử dụng scrollView, bạn phải bỏ chọn "use AutoLayout" trong trình kiểm tra tệp.

hoặc nếu bạn muốn "sử dụng AutoLayout", sau đó trong .m (thực hiện) nộp thêm này

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    theScroller.contentSize=CGSizeMake(1024.0,1300.0); 
} 
+1

Cảm ơn bạn, cảm ơn bạn, cảm ơn bạn !! Đập đầu vào một bức tường gạch trong một giờ hoặc hơn với cái này. Một lần nữa, cảm ơn bạn. – PaulJ

+2

OK, vì vậy câu trả lời cho AutoLayout được tìm thấy ở đây: http://stackoverflow.com/questions/12619786/embed-imageview-in-scrollview-with-auto-layout-on-ios-6 về cơ bản, di chuyển 'contentSize' mã vào phương thức 'viewDidAppear'. – PaulJ

+0

THANK YOU cho bài đăng này !!!! Tôi đã đốt cháy cả ngày với điều này. Tôi bỏ chọn "sử dụng AutoLayout" và cuối cùng scrollView của tôi hoạt động giống như nó được cho là. Burns tôi lên ... TY một lần nữa – tg2007

4

Bạn có thể làm điều đó với Auto Layout trong XCode 4.5 Nhưng bạn cấu hình UIScrollView của bạn trong viewDidAppear

Tôi làm điều này cũng trong một UITableView tĩnh với hình ảnh.

Tên hình ảnh của bạn như timg1.png, timg2.png ....

trong ControllerView.h file

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

của bạn Trong ControllerView.m tập tin của bạn

-(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; 

} 
0

tôi sẽ làm như sau:

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

Tôi sử dụng biến lớp _y kể từ khi tôi thêm tất cả chiều cao phụ đề vào nó.