2013-08-02 32 views
12

Tôi đã thiết lập UIScrollView mà tôi muốn hiển thị 12 hình ảnh (chỉ 8 vừa trên màn hình) được đặt theo chiều ngang. Trong hình dưới đây bạn sẽ nhìn thấy vấn đề tôi đang gặp (mà làm cho quan điểm của tôi cuộn không di chuyển), những hạn chế của tôi và UIScrollView mà tôi đã thêm vào kịch bản:iOS: Tự động trả lời khiến UIScrollView không cuộn

Screenshot of storyboard showing constraints

Tôi đã gọi là phương pháp sau đây trên -(void)viewDidLoad, nơi tôi "thiết lập" scrollview của tôi (itemList là tài sản xem di chuyển của tôi và itemNames một mảng với images'names):

- (void)setupHorizontalScrollView 
{ 
    self.itemList.delegate = self; 
    [self.itemList setTranslatesAutoresizingMaskIntoConstraints:NO]; 

    [self.itemList setBackgroundColor:[UIColor blackColor]]; 
    [self.itemList setCanCancelContentTouches:NO]; 

    self.itemList.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    self.itemList.clipsToBounds = NO; 
    self.itemList.scrollEnabled = YES; 
    self.itemList.pagingEnabled = NO; 

    NSInteger tot=0; 
    CGFloat cx = 0; 
    for (; ; tot++) { 
     if (tot==12) { 
      break; 
     } 

     UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[self.itemNames objectAtIndex:tot]]]; 

     CGRect rect = imageView.frame; 
     rect.size.height = 40; 
     rect.size.width = 40; 
     rect.origin.x = cx; 
     rect.origin.y = 0; 

     imageView.frame = rect; 
     [self.itemList addSubview:imageView]; 
     cx += imageView.frame.size.width; 
    } 

    [self.itemList setContentSize:CGSizeMake(cx, [self.itemList bounds].size.height)]; 
} 

tôi đã thêm [self.itemList setTranslatesAutoresizingMaskIntoConstraints: NO]; bởi vì tôi thấy đề xuất này trên các bài đăng khác, nhưng nó không hoạt động với hoặc không có nó. Cách duy nhất nó hoạt động là nếu tôi bỏ chọn sử dụng AutoLayout trên bảng phân cảnh, nhưng điều đó di chuyển các UIImageView tôi sử dụng để xem như một thanh điều hướng đến dưới cùng của màn hình. Tôi không biết phải làm gì nữa, bất kỳ sự giúp đỡ được đánh giá cao :)

Trả lời

9

Hai giải pháp:

  1. Tạo các ràng buộc khác nhau có thể được thỏa mãn cùng một lúc (bạn sẽ phải chỉnh sửa). Tôi nghĩ vấn đề là không gian phía dưới của bạn và các ràng buộc về không gian hàng đầu là loại trừ lẫn nhau. vui lòng xóa một và thử lại. Nếu điều này là khó khăn đối với bạn, hãy thử thêm UIView để chứa UIScrollView để giúp quản lý các ràng buộc của bạn, ban đầu có vẻ lạ, nhưng đôi khi việc thêm chế độ xem khác để chứa chế độ xem của bạn thực sự làm cho nó đơn giản hơn ở mỗi cấp.

  2. Tắt Tự động điền và thay đổi mặt nạ tự động hóa của UIImageView thành những gì bạn muốn.

+0

Tôi đã cố xóa một trong số chúng, nhưng tôi không biết cách thực hiện. Có thể nói cho tôi biết? – dietbacon

+1

Nhấp vào biểu tượng bánh răng nhỏ trên ràng buộc và xóa biểu tượng bánh răng nếu nó cho phép bạn hoặc thay đổi nó ít cụ thể hơn (ví dụ: biến hoặc tự động - vì vậy nó không quan tâm). –

+1

sau thời điểm này, autolayout sẽ ngày càng quan trọng đối với việc phát triển UI và giao diện người dùng iOS/Mac. tính năng nhúng trong chế độ xem thực sự đã giúp tôi thực hiện chế độ xem cuộn trong khi vẫn sử dụng tất cả các lợi ích của tính năng tự động trả lời. –

3

Insert: [scrollView setContentSize:CGSizeMake(x,y)]; bằng phương pháp sau:

-(void)viewWillAppear:(BOOL)animated 
31

Cố gắng thiết lập của scrollview của bạn Nội dung kích thước int "viewDidLayoutSubviews" phương pháp với việc giữ autolayouts thiết lập.

-(void)viewDidLayoutSubviews 
{ 
    [self.itemList setContentSize:CGSizeMake(required_width, required_height)]; 
} 
+0

Tuyệt vời nó làm việc ra xin vui lòng cho tôi biết lý do tại sao chúng ta cần phải thêm phương pháp này. –

+0

tuyệt vời bro ... Cảm ơn bạn ... Nó làm việc cho tôi cũng ... –

+0

cảm ơn nó đã làm việc cho tôi quá nhưng whats sự khác biệt +1 – ashokdy

Các vấn đề liên quan