2015-07-02 13 views
7

Mam UIScrollView wewnątrz UIViewController (z podklasą ImageViewController). Sam ViewController jest częścią stosu NavigationController. Teraz, oprócz paska nawigacyjnego, chcę, aby ScrollView zajmował cały dostępny pokój na ekranie. UIImageView wewnątrz przewijania powinien wypełnić wolne miejsce w widoku przewijania. Aktualny stan możesz zobaczyć na dole tego posta.UiScrollview z zagnieżdżonym obrazem wygląda dziwnie

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 
    } 
} 

Kod pozostawia niepotrzebne obramowania (w lewo, prawo, górę). Jak się ich pozbyć?

enter image description here

EDIT: Z @ sugestią Bxtr i another stackoverflow thread udało mi się usunąć granice lewo i prawo do widoku przewijania. Po kilku kolejnych wykopach dowiedziałem się, że wyłączając obraz Adjust Scroll View Insets, obraz wewnątrz widoku przewijania może być prawidłowo ustawiony pionowo. Wciąż nie dostaję przyczyny pionowego przemieszczenia w pierwszej kolejności ...

Odpowiedz

5

Czy sprawdziłeś wartości marginesów/dopełnienia, ponieważ wygląda to tak (ten sam rozmiar na lewej i prawej krawędzi). Jeśli tak nie jest, czy mógłbyś również opublikować swój plik xml działania, abyśmy mogli pomóc Ci w każdej części zagadki?

+0

Masz rację co do lewego i prawego marginesu! Jeśli chodzi o kwestię pionową, właśnie zaktualizowałem post (problem został rozwiązany, ale nie rozumiem dlaczego). Jeśli masz dalsze spostrzeżenia, chętnie bym się o nich tutaj dowiedział. – Bastian

+0

Będę robić dalsze badania na ten temat, kiedy wrócę z Hollydays, ale cieszę się, że pomogłem ci! – Bxtr

2

Można użyć UIView w UIScrollView, a UIView zawiera UIImage. Musisz poprawnie ustawić wiązania.

3

scrollView.contentSize = image.size;

musisz napisać tę linię. Jasno ustawiasz rozmiar zawartości przewijania do rozmiaru obrazu. Musisz ustawić rozmiar zawartości, aby pasował do szerokości ekranu.

0

Po jakimś bardziej kopanie I okazało się, że przez wyłączanie Ustaw przewijania Zobacz wypustkami, obraz wewnątrz widoku przewijania może być poprawnie pionowo. Nadal nie rozumiem przyczynę pionowej zgubienia w pierwszej kolejności ...

Powodem jest to, że własność automaticallyAdjustsScrollViewInsets kontrolera widoku jest domyślnie TAK, następuje z dokumentacji Apple:

automaticallyAdjustsScrollViewInsets

wartość logiczna wskazująca czy kontroler widoku powinny automatycznie dostosować swoje przewijania zobacz wypustki.

Wartość domyślna to TAK, dzięki czemu kontroler podglądu może dopasować swoje wstawki widoku przewijania w postaci w odpowiedzi na obszary ekranu zużywane przez pasek stanu, pasek nawigacji i pasek narzędzi lub pasek kart na stronie . Ustaw na NIE, jeśli chcesz samodzielnie zarządzać korektami wstawek przewijania, np. Gdy istnieje więcej niż jeden widok przewijania w hierarchii widoku.

Oprócz ustawienia automaticallyAdjustsScrollViewInsets = Nie można przypiąć Scrollview do topLayoutGuide (zamiast na górę zdaniem viewController za) podczas korzystania autoLayout.

+0

W rzeczywistości, górna przestrzeń w scrollView została już przypięta do przewodnika Top Layout Guide. Przy takim ustawieniu i automatycznie dostosowująScrollViewInsets = YES następuje pionowe odchylenie. Więc jeszcze raz: jestem bardzo zdziwiony, dlaczego muszę ustawić właściwość NIE, aby uzyskać pożądany układ. – Bastian