2015-01-23 16 views
6

Chúng tôi sẽ phát triển một dự án trong ios, Vì vậy, tôi đang học cách bố trí tự động với scrollview, Nó hoạt động tốt khi tôi thêm một hình ảnh, Khi tôi cố gắng để thêm nhiều hơn một hình ảnh, tôi đã có điều rất lạ hình ảnh đầu tiên đã được kéo dài và chồng chéo với hình ảnh rất tiếp theo. Đây là mã của tôiUIScrollView không hoạt động với Autolayout Lập trình (sử dụng nhiều ảnh)

UIScrollView *scrollView = [[UIScrollView alloc] init]; 
UIImageView *imageView = [[UIImageView alloc] init]; 
[imageView setImage:[UIImage imageNamed:@"2.png"]]; 

UIImageView *imageView1 = [[UIImageView alloc] init]; 
[imageView1 setImage:[UIImage imageNamed:@"01.png"]]; 
[self.view addSubview:scrollView]; 

[scrollView addSubview:imageView1]; 
[scrollView addSubview:imageView]; 

scrollView.translatesAutoresizingMaskIntoConstraints = NO; 
imageView.translatesAutoresizingMaskIntoConstraints = NO; 
imageView1.translatesAutoresizingMaskIntoConstraints = NO; 

self.imageViewPointer = imageView; 
self.imageViewPointer = imageView1; 
scrollView.maximumZoomScale = 2; 
scrollView.minimumZoomScale = .5; 
scrollView.delegate = self; 

NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView,imageView1); 
NSLog(@"Current views dictionary: %@", viewsDictionary); 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]]; 
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[imageView]|" options:0 metrics: 0 views:viewsDictionary]]; 
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-415-[imageView]|" options:0 
                    metrics: 0 views:viewsDictionary]]; 

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView1]-20-|" options:0 metrics: 0 views:viewsDictionary]]; 
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView1]-150-|" options:0 metrics: 0 views:viewsDictionary]]; 

và tôi nhận được kết quả !!!

enter image description here

+0

Nó đang làm việc, nhưng nó không phải là dễ dàng để thiết lập các ràng buộc. Ở đây bạn có chủ đề trùng lặp nơi nhiều người mô tả cách họ đã xử lý vấn đề này: http://stackoverflow.com/questions/20223021/i-am-officially-too-stupid-for-uiscrollview-with-autolayout – KlimczakM

+0

Tôi sẽ khuyên bạn nên sử dụng thư viện PureLayout: https://github.com/smileyborg/PureLayout –

+0

cảm ơn phản hồi của bạn, Xin lỗi tôi quên nói với nó "Tôi đang tìm kiếm nó theo chương trình". – nisar

Trả lời

3

Kích thước của vùng cuộn của bạn ScrollView sẽ được đặt theo giới hạn của các phần phụ của nó.

Bạn có 2 chế có thể được dùng để xác định chiều cao của khu vực cuộn:

  1. "V:|-415-[imageView]|"

    này cho Auto Layout để đặt hình ảnh của bạn 415 điểm từ đầu SuperView và để đặt nó 0 điểm từ dưới cùng của superview của nó. Nó không chỉ định chiều cao, nhưng bố cục tự động sẽ sử dụng chiều cao của hình ảnh chứa trong imageView không có ràng buộc nào khác. Lưu ý imageView có thể được kéo dài nếu cần thiết để đáp ứng các ràng buộc khác.

  2. "V:|[imageView1]-150-|"

    này cho Auto Layout để đặt hình ảnh của bạn 0 điểm từ phía trên cùng của SuperView và 150 điểm từ tận đáy SuperView của nó. Nó không chỉ định chiều cao. Bởi vì điều này, bố cục tự động là miễn phí để kéo dài một trong những hình ảnh để đáp ứng cả hai khó khăn.

Thay vào đó, bạn nên cung cấp thông tin về cách hình ảnh được đặt cách nhau tương đối. Ví dụ:

"V:|-20-[imageView1]-20-[imageView]-20-|"

Nếu bạn đang thêm những hình ảnh cùng một lúc, bạn không cần phải chỉ định này cùng một lúc. Bạn có thể thêm những hạn chế như thế này:

"V:|-20-[imageView1]"

"imageView1 là 20 điểm từ phía trên cùng của SuperView"

"V:[imageView1]-20-[imageView]"

"IMAGExem là 20 điểm dưới đây imageView1"

"V:[imageView]-20-|"

"imageView cách 20 phút từ bot tom của người giám sát "

Khi bạn đã hạn chế tất cả các chế độ xem hình ảnh với nhau và ở trên cùng và dưới cùng của scrollView, Bố cục tự động sẽ có thể tính toán chiều cao của scrollView.


Bạn cũng sẽ gặp vấn đề tương tự với chiều rộng của mình. Bạn đã hạn chế cả các hình ảnh của bạn để cả hai mặt của SuperView:

"H:|-20-[imageView]|"
"H:|[imageView1]-20-|"

Do đó, Auto Layout sẽ kéo dài một trong những hình ảnh của bạn để đáp ứng các ràng buộc. Chỉ nên sử dụng hình ảnh rộng nhất của bạn để chỉ định chiều rộng của scrollView. Tất cả những người khác chỉ nên được hạn chế ở cạnh trái của người giám sát và để lại dấu vết |.

Một lần nữa, nếu bạn đang thêm những hình ảnh này một và bạn không biết rộng nhất là gì cho đến khi bạn thêm tất cả, hãy theo dõi ảnh rộng nhất bạn đã thấy cho đến nay và chỉ giới hạn hình ảnh sang cạnh trái. Sau đó, khi bạn làm xong, thêm một hạn chế để thiết lập chiều rộng của khu vực di chuyển của bạn dựa trên quan điểm rộng nhất:

"H:|-20-[imageView]-20-|"

+0

có ngay bây giờ tôi đã có một cái gì đó về autolayout, Cảm ơn bạn. – nisar

0

Chính xác bạn muốn đạt được điều gì? Nếu bạn muốn có danh sách các hình ảnh, bạn nên sử dụng UITableView. Nhưng dù sao, mã của bạn sẽ trông giống như thế này:

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]]; 
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]]; 

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 views:viewsDictionary]]; 
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-415-[imageView]" options:0 
                    metrics: 0 views:viewsDictionary]]; 

[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView1]|" options:0 metrics: 0 views:viewsDictionary]]; 
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView1]" options:0 metrics: 0 views:viewsDictionary]]; 
+0

Tôi đang làm điều đó cho việc học cơ bản trong ios, tôi cần phải tìm hiểu bố cục tự động cho các thành phần ui (như nút, hình ảnh, ...) nhưng tôi đã thử nó với hình ảnh và tôi có đầu ra lạ. Tôi cần lý do tại sao hình ảnh đầu tiên bị chồng chéo với hình ảnh thứ hai. cảm ơn phản hồi của bạn .. – nisar

+0

Bố cục được hiển thị theo cách bạn đã viết mã. Kiểm tra mã (hằng số AutoLayout). –

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