2012-01-10 27 views
27

Tôi có một uiscrollview cuộn theo chiều dọc - hãy tưởng tượng một trang 'về ứng dụng này' của một ứng dụng thanh tab mà đi trên một chút và yêu cầu một scrollview. Nó chỉ chứa một vài hình ảnh, video và một số văn bản (chỉ video đã được mã hóa - phần còn lại đã được đặt trong GUI). Trong bảng phân cảnh (Interface Builder?) Xcode 4.2, mọi thứ được thiết lập vì nó hoạt động tốt, nhưng khung nhìn chỉ lớn như những gì bạn thấy trên màn hình, không thể sắp xếp theo cách thủ công ban đầu offscreen - bạn cần phải di chuyển lên đến? Cách duy nhất tôi đã tìm thấy cho đến nay là thiết kế chúng trên chế độ xem hiển thị, sau đó điều hướng chúng xuống bằng các phím mũi tên ..Thiết kế bên trong một scrollview trong xcode 4.2 với storyboards

Trả lời

39

Tôi cảm thấy đau đớn của bạn. Cách duy nhất tôi tìm thấy là xoay thủ công chế độ xem cuộn trong trình kiểm tra kích thước để hiển thị phần của chế độ xem mà bạn muốn chỉnh sửa trực quan.

Sử dụng UIView để chứa các phần tử để chúng được định vị tương đối với chế độ xem này. Thêm dạng xem dưới dạng một chế độ xem con vào scrollview ở 0,0.

  1. pan: sử dụng toạ độ Y nói đến -200, sau đó chỉnh sửa nội dung.
  2. để đặt thêm nội dung trong phần ẩn, xoay lại để hiển thị bất động sản mới
  3. khi hoàn tất, khôi phục giá trị của chiều cao và vị trí X, Y của ScrollView.

Đảm bảo hình chữ nhật khung cuộn cuộn nhỏ hơn chế độ xem được chứa.

+16

Giải pháp tốt cho một vấn đề không nên tồn tại! –

51

Trong bảng phân cảnh chọn chế độ xemController, sau đó trong Thuộc tính thanh tra thay đổi 'size' thành 'freeform' . Sau đó thay đổi 'chiều cao' của chế độ xem/cuộn thành lớn như bạn cần. Các thiết lập mặc định của thanh chống và lò xo nên chăm sóc thay đổi kích thước xem lại một cách chính xác khi ứng dụng được chạy, nhưng bạn nên kiểm tra lại.

+0

Điều này dường như hoạt động tốt cho đến khi tôi cố gắng thay đổi kích thước chế độ xem hoặc cuộn trong bảng phân cảnh, tại thời điểm đó nội dung tất cả đều liên quan đến sự thay đổi về kích thước ... – John

+0

Để John, thực ra đây không phải là vấn đề. Nếu bạn đi đến "kiểm tra kích thước" cho rằng xem di chuyển và sửa đổi "tự động định cỡ". Xóa cả mũi tên ngang và dọc bên trong hình chữ nhật. (Tôi cũng xóa các mũi tên "phải" và "dưới cùng" để chế độ xem cuộn của tôi có thể gắn với góc trên cùng bên trái). Sau đó, kích thước của chế độ xem cuộn sẽ không bị ảnh hưởng bởi kích thước của chế độ xem gốc. –

+0

Không có kích thước hoặc dạng tự do. –

2

Chỉ cần bỏ chọn "Tự động hóa các bản xem trước" từ bất kỳ chế độ xem nào bạn đang cố gắng đổi kích thước và nó sẽ giữ cho tất cả các đối tượng của bạn không đổi kích thước với nó.

4

Trên iOS 6.0, bạn có thể kéo Chế độ xem vùng chứa bên trong Chế độ xem cuộn. Thao tác này sẽ tự động tạo Chế độ xem mới cho nội dung của bạn, bên ngoài cảnh hiện tại. Sau đó, bạn có thể thay đổi kích thước chế độ xem này thành lớn nếu cần để vừa với nội dung của bạn.

Tôi tin rằng bạn vẫn phải đặt chiều cao nội dung ScrollView khi chạy, nhưng ít nhất bạn có thể thiết kế chế độ xem nội dung cùng một lúc mà không phải cuộn lên và xuống trên IB.

+0

Tôi nghĩ bạn nên đặt chiều cao của Chế độ xem vùng chứa, thay vì chiều cao nội dung của ScrollView. Những gì tôi muốn biết là làm thế nào để thiết lập chiều cao khung nhìn Container đến chiều cao của khung nhìn nhúng bằng cách sử dụng các ràng buộc bố trí. Bạn có bất cứ suy nghĩ về điều này? –

25

mới: 3/26/2013

tôi stumbled khi những gì tôi nghĩ là cách thậm chí đơn giản để đối phó với UIScrollView trực tiếp trong kịch bản này.

  1. Không cần mã, chỉ cần cài đặt bảng phân cảnh. Điều này có thể mới trong iOS6.1/Xcode 4.6
  2. Không cần phải vô hiệu hóa các ràng buộc (ví dụ: bỏ chọn "Sử dụng tự động trả lời" trong Trình kiểm tra tệp cho tệp bảng phân cảnh)
  3. Không cần phải thêm UIScrollView * scrollView; in .h
  4. Không cần thêm self.scrollView.contentSize = ...trong ghi đè của viewWillAppear hoặc viewDidLoad

Đây là những gì tôi đã làm (phần quan trọng đánh dấu bằng **): (xem code)

  1. Tạo một dự án mới với kịch bản kích hoạt
  2. Drop trong một UIScrollView , đặt lớp trong trình kiểm tra nhận dạng cho bộ điều khiển chế độ xem
  3. Trong thuộc tính Trình kiểm tra, thay đổi Kích thước theo chỉ số mô phỏng thành Freeform **
  4. Chọn cuộn Chế độ xem; Trong thanh tra thuộc tính, bật "cuộn được bật" và "nền" thành "Trắng" (bạn sẽ tìm ra lý do - nếu không)
  5. Trong Trình kiểm tra kích thước (với chế độ xem cuộn đã chọn), hãy thay đổi chiều cao thành 900 cho ví dụ **
  6. Thêm các nút, một ở trên và một ở dưới cùng
  7. Thêm trình xử lý mặc định cho nútTouchUpInside cho cả hai nút và chỉ cần Đăng nhập người gửi.

Chọn View Controller và chế độ xem cuộn và kiểm tra thanh tra.

+6

Có rất nhiều tài liệu về chủ đề này, nhưng bạn là người đầu tiên tôi bắt gặp thực sự trả lời câu hỏi chết tiệt đó. FREEFORM là những gì sửa chữa nó. Tôi đã dành một thời gian dài chết tiệt cố gắng tìm ra điều này, cảm ơn bạn đã chia sẻ! –

+3

freeform của bộ điều khiển xem? – coolcool1994

0

Tôi đã đấu tranh với điều này một thời gian, và mọi điều tôi đã thử đều thất bại.

Cụ thể, Điều tôi đang cố gắng đạt được là hộp thoại có kích thước có kích thước tự do với chế độ xem có thể cuộn chứa vùng chứa cho chế độ xem khác. Tôi đã có rất nhiều kết quả khác nhau, bao gồm đôi khi nó hoạt động chính xác. Thông thường tôi nhận được nó chính xác, nhưng không có cuộn.

Cuối cùng, mã được tải xuống của Dickey Singh, hoạt động hoàn hảo nhưng không có gì đặc biệt. (Giải pháp sạch BTW). Vì vậy, tôi đã thêm chế độ xem vùng chứa vào nó, chính xác như tôi đã có trong mã của mình và đã phá vỡ!

Sau một số thử nghiệm, tôi đã tìm ra những gì đang diễn ra. Chỉ cần chịu với tôi.

1) Sử dụng Bố cục tự động, kích thước của chế độ xem cuộn dường như chỉ ra những giới hạn cuộn sẽ là gì. Đặt "contentSize" trong "USer Defined Runtime Attributes" dường như không ảnh hưởng đến điều này và cũng không đặt "contentSize" hoặc "bounds" trong "viewWillDisplay" hoặc "viewDidLoad". Do đó, nếu kích thước ban đầu của chế độ xem cuộn là 800x800, đó sẽ là tất cả không gian có thể được hiển thị. Vì lý do này, khi tôi muốn một vùng có thể cuộn, tôi tạo một khung nhìn vùng chứa và sau đó đặt chế độ xem cuộn bên trong nội dung.

2) Không có bố cục tự động, đặt "contentSize" trong "Thuộc tính thời gian chạy do người dùng xác định" hoạt động, cũng như bằng cách đặt nó theo chương trình trong "viewDidLoad". Tôi thích sử dụng "Thuộc tính thời gian chạy do người dùng xác định" vì nó giữ kích thước với bố cục. Giải pháp này cho phép bạn sử dụng chế độ xem cuộn linh hoạt hơn vì nó có thể có kích thước bất kỳ ở thời gian thiết kế.

3) Bất kể bố cục tự động, nếu bất kỳ chế độ xem nào trong vùng cuộn khớp chính xác với giá trị khung ngang hoặc dọc, thì chế độ xem cuộn sẽ ngừng hoạt động dưới dạng chế độ xem cuộn. Điều này áp dụng cho mã của riêng tôi và mã của Dickey Singh trong mọi cấu hình có thể mà tôi đã thử.

Tôi không biết nguyên nhân gây ra (3), nhưng rõ ràng là lỗi.

Tôi hy vọng điều này sẽ giúp mọi người ở bên ngoài đang đấu tranh để sử dụng chế độ xem cuộn.Tôi tưởng tượng rằng một số người đang sử dụng chúng mà không có bất kỳ vấn đề gì, và một số (như tôi) đã lưu ý nhưng vấn đề với họ.

0

Đây là giải pháp của tôi để thiết kế một scrollview với hàm lượng lớn hơn so với màn hình hoàn toàn trong Storyboard (tốt, ngoại trừ 1 dòng mã :-):

https://stackoverflow.com/a/19476991/1869369

0

Tôi hiện đang phát triển một ứng dụng cho iOS 7 và tôi đã làm chính xác như câu trả lời của @Dickey Singh, nhưng nó không hoạt động ngay từ đầu. Sau khi kiểm tra bảng phân cảnh, tôi thấy rằng chúng tôi cũng cần thêm các ràng buộc bố cục tự động cho bộ điều khiển chế độ xem có chứa scrollView. Dường như các ràng buộc bố cục tự động như vậy sẽ được thêm tự động trước Xcode 5, nhưng bây giờ chúng ta cần tự làm. Cách thêm ràng buộc: Trước tiên hãy chọn bộ điều khiển xem trong bảng phân cảnh; Nhập 'Editor' trong menu trên cùng; Chọn 'Giải quyết vấn đề bố cục tự động'; Chọn 'Thêm các ràng buộc còn thiếu trong vùng chứa'. Xong :-)

10

Chỉ cần thay đổi 'Kích thước mô phỏng' của bộ điều khiển chế độ xem thành dạng tự do và đặt chiều cao lớn hơn kích thước thông thường, bạn sẽ có thể xem tất cả các cửa hàng bạn cần chỉnh sửa.

+1

bạn đã thay đổi cuộc sống của tôi, cảm ơn bạn: D –

+0

Đây phải là câu trả lời được chấp nhận .. nhiều giải pháp thanh lịch hơn – Ciprian

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