2015-07-02 10 views
7

Ich habe ein UIScrollView in einem UIViewController (Unterklasse von ImageViewController). Der ViewController selbst ist Teil eines NavigationController-Stacks. Abgesehen von einer Navigationsleiste möchte ich mit der ScrollView nun den gesamten verfügbaren Raum auf dem Bildschirm einnehmen. Die UIImageView in der Bildlaufansicht sollte dann den verfügbaren Raum der Bildlaufansicht füllen. Sie können den aktuellen Status am Ende dieses Beitrags sehen.UiScrollview mit verschachtelten Bild sieht seltsam

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

Der Code hinterlässt mich mit unnötigen Grenzen (links, rechts, oben). Wie werde ich sie loswerden?

enter image description here

EDIT: Mit @ Bxtr Vorschlag und another stackoverflow thread ich war in der Lage, die Grenzen zu entfernen, links und rechts auf die Scroll-Ansicht. Nach etwas mehr Graben fand ich heraus, dass durch Deaktivieren von Adjust Scroll View Insets das Bild in der Bildlaufansicht korrekt vertikal positioniert werden kann. Trotzdem bekomme ich den Grund für die vertikale Fehlplatzierung überhaupt nicht ...

Antwort

5

Haben Sie die margin/padding Werte überprüft, weil es irgendwie so aussieht (gleiche Größe am linken und rechten Rand). Wenn dies nicht der Fall ist, könnten Sie bitte auch Ihre XML-Datei der Aktivität posten, damit wir Ihnen jeden Teil des Puzzles zur Verfügung stellen können?

+0

Sie hatten recht am linken und am rechten Rand! Bezüglich des vertikalen Problems habe ich gerade den Beitrag aktualisiert (das Problem ist gelöst, aber ich verstehe nicht warum). Wenn Sie weitere Einsichten haben, würde ich mich freuen, über sie zu erzählen. – Bastian

+0

ich werde einige weitere Forschungen darüber machen, wenn ich von Hollydays zurück bin, aber ich bin froh, dass ich dir geholfen habe! – Bxtr

2

Sie können eine UIView in UIScrollView verwenden, und diese UIView enthält UIImage. Sie müssen die Bedingungen korrekt festlegen.

3

scrollView.contentSize = Bildgröße;

müssen Sie diese Zeile tweek. Sie legen die Inhaltsgröße der Bildlaufansicht explizit auf die Bildgröße fest. Sie müssen die Inhaltsgröße auf die Breite des Bildschirms einstellen.

0

Nachdem einige weitere Graben dass ich herausgefunden habe durch Justieren Scroll Insets Ansicht Deaktivierung kann das Bild in der Bildlaufansicht korrekt sein vertikal positioniert. Aber ich habe nicht den Grund für das vertikale Abhandenkommen in erster Linie ...

Der Grund dafür ist, dass die automaticallyAdjustsScrollViewInsets Eigenschaft des View-Controller standardmäßig JA ist, die von der Dokumentation Apfel folgt:

automaticallyAdjustsScrollViewInsets

Ein boolescher Wert, der automatisch seine Scroll Ansicht einfügungen , ob die view-Controller anzeigt einstellen sollte.

Der Standardwert ist YES, mit dem der Ansichtscontroller seine Bildlaufeinfügungen als Reaktion auf die von der Statusleiste, Navigationsleiste und Symbolleiste oder Registerleiste verwendeten Bildschirmbereiche anpassen kann. Setzen Sie den Wert auf NO, wenn Sie Scroll View Inset-Anpassungen selbst verwalten möchten, z. B. wenn in der Ansichtshierarchie mehr als eine Bildlaufansicht vorhanden ist, wenn .

automaticallyAdjustsScrollViewInsets Neben Einstellung = Nein, können Sie die Scrollview auf den topLayoutGuide Stift (statt an die Spitze der nach Ansicht des Viewcontroller), wenn autolayout verwenden.

+0

Der obere Bereich der scrollView wurde bereits an den Top Layout Guide angeheftet. Mit dieser Einstellung und der automatischen Anpassung von ScrollViewInsets = YES erfolgt die vertikale Fehlplatzierung. Also noch einmal: Ich bin ziemlich verwirrt darüber, warum ich die Eigenschaft auf NEIN setzen muss, um das gewünschte Layout zu erhalten. – Bastian