UIImageView Größenanpassung zu beseitigen, leeren Raum, in IOS

Meine UIImageView im Aspekt Modus „anpassen“ die Blätter leere Raum unter dem eigentlichen Bild.

UIImageView Größenanpassung zu beseitigen, leeren Raum, in IOS

Den blauen Raum ist das, was ich will, Sie zu beseitigen, so dass die Bildansicht umschließt das Bild (wenn ich doch nur wickeln content). Schien wie eine einfache Aufgabe, aber ich merkte schnell, dass das Bild im Aspekt passen, damit das Bild änderungen anzeigen, die die Breite und Höhe des Bildes, aber dann müsste ich noch eine Berechnung, auf die image-anzeigen, die auf dieser Grundlage veränderte Bild, das würde einen nie endenden Schleife schrumpft das Bild.

UIImageView Größenanpassung zu beseitigen, leeren Raum, in IOS

Will ich einfach nur zu entfernen die Leerzeichen, um es so Aussehen mehr kompakt sein. Das ganze Projekt auf GitHub: https://github.com/sak6lab/Closet-Space

  • Möchten Sie ändern die Breite auf stimmige Höhen? Oder ändern Sie die Höhe auf konsistente breiten?
  • Tut mir Leid aber ich weiß wirklich nicht verstehen, die Frage.
  • Ich glaube, ich will, um die Höhe zu ändern, um konsistente breiten jedoch habe ich bereits berechnet sich die Höhe der Breite jeder Zelle, was wiederum das gleiche wie der UIImageView.
  • Ich denke, ich habe mich nur gefragt, wie Sie geplant, um layout side-by-side-Elemente, wo ein Bild sein könnte, hoch und schmal (wie die T-Shirt) und der nächste sein könnte, kurz und breit (wie ein Schuh). Wenn Sie versuchen, ändern der Größe der Bilder um zusätzliche Leerzeichen zu entfernen, können Sie glücklich sein mit dem einen aber nicht dem anderen. (eine Art off-the-Stelle der tatsächlichen Größe-Aspekt der obwohl Frage)
InformationsquelleAutor Sak6lab | 2017-07-06



2 Replies
  1. 5

    Legte ich ein radar vor kurzem für diese, wie ich glaube, es ist gebrochen Verhalten.

    Derzeit die beste Möglichkeit, die ich gefunden habe, um dies zu beheben, fügen Sie ein Seitenverhältnis Einschränkung, um das Bild anzuzeigen, basierend auf dem Seitenverhältnis des Bildes. (Sie müssen zum aktualisieren der Einschränkung, wenn das Bild ändert sich aber).

    Etwas wie…

    imageView.widthAnchor.constraint(equalTo: imageView.heightAnchor, multiplier: image.size.width / image.size.height).isActive = true

    Könnten Sie wickeln Sie diese in ein UIImageView Unterklasse vielleicht. Überschreiben Sie die didSet des image Eigentum oder auch nur eine neue Funktion hinzufügen.

    Aber seien Sie vorsichtig, wie Sie benötigen, um sicherzustellen, dass Sie nur erstellen eine Einschränkung und auf nachfolgende Durchgänge der Aktualisierung der bereits vorhandenen Einschränkung.

    • Danke es hat sicherlich geholfen!
  2. 0

    Also basierend auf Fogmeister Antwort,statt Breite, ändern Sie die Höhe und dann von Höhe zu Breite für die Ansicht

    let newsize = self.feedImage.contentClippingRect
    
    self.feedImage.heightAnchor.constraint(equalTo: self.feedImage.widthAnchor, multiplier:newsize.width / newsize.height).isActive = true

    wo newsize ist die CGRect nach skalieren wir mit .scaleaspectfit
    Hinweis: die unten Erweiterung von https://www.hackingwithswift.com/example-code/uikit/how-to-find-an-aspect-fit-images-size-inside-an-image-view

    extension UIImageView {
        var contentClippingRect: CGRect {
        guard let image = image else { return bounds }
        guard contentMode == .scaleAspectFit else { return bounds }
        guard image.size.width > 0 && image.size.height > 0 else { return bounds }
    
        let scale: CGFloat
        if image.size.width > image.size.height {
            scale = bounds.width / image.size.width
        } else {
            scale = bounds.height / image.size.height
        }
    
        let size = CGSize(width: image.size.width * scale, height: image.size.height * scale)
        let x = (bounds.width - size.width) / 2.0
        let y = (bounds.height - size.height) / 2.0
        //print ("image resizing[width=\(size.width), height=\(size.height)")
        return CGRect(x: x, y: y, width: size.width, height: size.height)
        }
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.