2015-07-02 13 views
7

Tôi có một UIScrollView bên trong một UIViewController (được phân lớp bởi ImageViewController). Bản thân ViewController là một phần của ngăn xếp của NavigationController. Bây giờ, ngoài việc có một thanh điều hướng, tôi muốn ScrollView để có tất cả các phòng có sẵn trên màn hình. UIImageView bên trong scrollview sau đó sẽ điền vào các phòng có sẵn của xem di chuyển. Bạn có thể thấy trạng thái hiện tại ở cuối bài đăng này.UiScrollview với hình ảnh lồng nhau trông lạ

class ImageViewController: UIViewController, UIScrollViewDelegate { 

    @IBOutlet weak var scrollView: UIScrollView! 
    var imageView: UIImageView? 
    var image: UIImage? 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     scrollView.delegate = self 

     if let image = image { 
      imageView = UIImageView(image: image) 
      if let imageView = imageView { 
       imageView.frame = CGRect(origin: CGPoint(x: 0, y: 0), size: image.size) 
       scrollView.addSubview(imageView) 
       scrollView.contentSize = image.size 

       let scaleHeight = scrollView.frame.size.height/scrollView.contentSize.height 
       let scaleWidth = scrollView.frame.size.width/scrollView.contentSize.width 
       let minimumScale:CGFloat = min(scaleHeight, scaleWidth) 
       let maximumScale:CGFloat = max(scaleHeight, scaleWidth) 

       scrollView.minimumZoomScale = minimumScale 
       scrollView.maximumZoomScale = maximumScale 
       scrollView.zoomScale = maximumScale 
      } 
     } 
    } 

    func viewForZoomingInScrollView(scrollView: UIScrollView) -> UIView? { 
     return imageView 
    } 
} 

Mã này để lại cho tôi biên giới không cần thiết (trái, phải, trên cùng). Làm cách nào để loại bỏ chúng?

enter image description here

EDIT: Với @ đề nghị Bxtr và another stackoverflow thread tôi đã có thể loại bỏ các biên giới trái và phải để xem di chuyển. Sau khi tìm hiểu thêm, tôi phát hiện ra rằng bằng cách hủy kích hoạt Adjust Scroll View Insets, hình ảnh bên trong chế độ xem cuộn có thể được định vị chính xác theo chiều dọc. Tuy nhiên, tôi không có lý do cho việc đặt sai vị trí thẳng đứng ở vị trí đầu tiên ...

Trả lời

5

Bạn đã kiểm tra các giá trị lề/đệm, vì nó trông giống như vậy (cùng kích thước trên đường viền trái và phải). Nếu nó không phải là trường hợp, bạn có thể xin vui lòng cũng đăng tập tin xml của bạn hoạt động vì vậy chúng tôi có thể có tất cả các phần của câu đố để giúp bạn?

+0

Bạn đã đúng về lề trái và phải! Liên quan đến vấn đề dọc, tôi vừa cập nhật bài đăng (vấn đề được giải quyết, nhưng tôi không hiểu tại sao). Nếu bạn có thêm thông tin chi tiết, tôi sẽ vui mừng khi đến đây về họ. – Bastian

+0

tôi sẽ làm một số nghiên cứu thêm về nó khi tôi sẽ trở lại từ hollydays, nhưng tôi vui vì tôi đã giúp bạn! – Bxtr

2

Bạn có thể sử dụng UIView trong UIScrollView và UIView chứa UIImage. Bạn cần đặt các ràng buộc đúng cách.

3

scrollView.contentSize = image.size;

bạn phải tweek dòng này. Bạn đang đặt rõ ràng kích thước nội dung chế độ xem cuộn cho kích thước hình ảnh. Bạn phải đặt kích thước nội dung cho vừa với chiều rộng của màn hình.

0

Sau khi một số chi tiết đào tôi phát hiện ra rằng bằng cách khử hoạt Adjust Scroll Xem Insets, hình ảnh bên trong xem di chuyển có thể được một cách chính xác theo chiều dọc vị trí. Tuy nhiên, tôi không nhận được lý do cho sự thất lạc dọc ở nơi đầu tiên ...

Lý do là tài sản automaticallyAdjustsScrollViewInsets bộ điều khiển xem là theo mặc định YES, sau đây là từ tài liệu táo:

automaticallyAdjustsScrollViewInsets

Một giá trị logic Boolean cho biết liệu bộ điều khiển xem sẽ tự động điều chỉnh cuộn xem insets của nó.

Giá trị mặc định là YES, cho phép bộ điều khiển chế độ xem điều chỉnh chế độ xem cuộn để phản hồi các khu vực màn hình được thanh trạng thái, thanh điều hướng và thanh công cụ hoặc thanh tab tiêu thụ. Đặt thành NO nếu bạn muốn tự quản lý các điều chỉnh nội dung chế độ xem cuộn, chẳng hạn như khi có nhiều chế độ xem cuộn trong cấu trúc phân cấp chế độ xem.

Bên cạnh việc đặt tự độngAdjustsScrollViewInsets = Không, bạn có thể ghim scrollView vào đầuLayoutGuide (thay vì ở trên cùng của chế độ xemController) khi sử dụng autoLayout.

+0

Thực ra, không gian trên cùng của ScrollView đã được ghim vào Hướng dẫn bố cục hàng đầu. Với cài đặt này và tự độngAdjustsScrollViewInsets = YES xảy ra sai lệch theo chiều dọc. Vì vậy, một lần nữa: Tôi khá bối rối về lý do tại sao tôi phải thiết lập các tài sản để NO để có được bố trí mong muốn. – Bastian

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