2016-11-02 6 views

Antwort

2

Ich hatte das gleiche Problem, nach der Suche nach einer möglichen eingebauten Funktion, die mich dazu in der Lage, leicht zu machen, - leider - ich konnte so etwas nicht finden. Ich hatte es von mir selbst zu lösen, indem sie diesen Trick tun:

Zum Zwecke der Demonstration, werde ich präsentieren diese -ugly- Kollektion und zeigen Ihnen, wie es sollte Änderungen:

enter image description here

Die Grundidee des Tricks ist Spiegelung! durch Ändern des ScaleX zu -1.

Lassen Sie uns Spiegel die ganze Sammlung Ansicht:

P. S: Swift-3-Code.

Wenn Sie kein IBOutlet für Ihre CollectionView haben, erstellen Sie eine. In meinem Fall im es collectionView

In Viewcontroller Aufruf:

override func viewDidLoad() { 
    super.viewDidLoad() 

    collectionView.transform = CGAffineTransform(scaleX: -1, y: 1) 
} 

Nun sollte es so aussehen:

enter image description here

"Was zum Teufel ?!"

Soweit so gut, in der Tat ist dies genau das, was Sie suchen, aber Sie müssen noch einen anderen mirroiring Mechanismus für jeden Zellinhalt hinzufügen.

In Ihrer benutzerdefinierten Zelle Klasse:

override func awakeFromNib() { 
    super.awakeFromNib() 

    contentView.transform = CGAffineTransform(scaleX: -1, y: 1) 
} 

Nun sollte es so aussehen:

enter image description here

Hoffe, es half.

+0

ziemlich cool :) nicht elegant Weg ... aber ich bin beeindruckt :) –

+0

das ist richtig, es ist nicht eine elegante Art und Weise , aber zumindest als Workaround funktioniert es! Wie ich schon sagte, ich konnte keinen besseren Weg finden, es zu tun ... –

1

Eine andere Lösung ist UICollectionViewFlowLayout Unterklasse und es wie folgt zu implementieren:

class CustomFlowLayout: UICollectionViewFlowLayout { 

    //MARK: - Private 

    private func reversedRect(for rect: CGRect) -> CGRect { 

     let point = reversedPoint(for: rect.origin) 
     let newPoint = CGPoint(x: point.x - rect.size.width, y: point.y) 

     return CGRect(x: newPoint.x, y: newPoint.y, width: rect.size.width, height: rect.size.height) 
    } 

    private func reversedPoint(for point: CGPoint) -> CGPoint { 
     return CGPoint(x: collectionViewContentSize.width - point.x, y: point.y) 
    } 

    //MARK: - Overridden 

    override func layoutAttributesForElements(in rect: CGRect) -> [UICollectionViewLayoutAttributes]? { 

     guard let attributes = super.layoutAttributesForElements(in: reversedRect(for: rect)) else { 
      return nil 
     } 

     for attribute in attributes { 
      attribute.center = reversedPoint(for: attribute.center) 
     } 

     return attributes 
    } 
} 

weisen Sie einfach im Interface Builder.

1

Der einfachste Weg es zu erreichen ist, den Wert der Sammlung Ansicht semanticContentAttribute Aufzählung Instanz Eigenschaft zu ändern:

Eine semantische Beschreibung des Inhalts der Ansicht, verwendete , um zu bestimmen, ob die Ansicht umgedreht werden soll wenn zwischen Layouts von links nach rechts und von rechts nach links gewechselt wird.

von bis .forceRightToLeft Einstellung wie folgt:

// 'viewDidLoad' would be a proper method to do it: 
override func viewDidLoad() { 
    // ... 

    collectionVIew.semanticContentAttribute = .forceRightToLeft 

    // ... 
} 
Verwandte Themen