2016-11-26 20 views
0

Ich lese verwandte Fragen (mit fast gleichen Titeln), aber es ist nicht mein Fall. Ich habe eine MKMapView und im unteren Teil des Bildschirms habe ich ScrollView und ImageView. Sie sind versteckt, aber wenn ich sie zeige, möchte ich die untere Einschränkung meiner MapView ändern. Das Problem ist, wenn ich die untere Einschränkung aktualisiere, ignoriert mein MapView es - ich habe ScrollView und ImageView transparent gemacht, um es zu überprüfen - und scrollt sogar nach oben, ich verstehe nicht warum. Mein Code für die Aktualisierung der Konstanten ist dies:Wie programmgesteuert Constraint-Konstanten ändern?

Ich überprüfte die Einschränkung, es ist die Einschränkung, die ich brauche. Ich habe versucht, so etwas wie

func layout() 
    { 
     self.view.layoutIfNeeded() 
    } 

zu schreiben, weil ich dachte, es könnte passieren, weil ich versuchte, von anderer Klasse konstant zu aktualisieren, aber es hat nicht geholfen. Was mache ich falsch?

+0

Anstatt die untere Einschränkung zu ändern, ändern Sie die Höhenkonstruktion von 'MKMapView'. –

+0

es hat keine Höhenbeschränkung, nur an den Seiten des Bildschirms fixiert – Jamil

Antwort

0

Das erste, was Sie tun sollten, ist zu überprüfen, ob die Einschränkung noch mit MapBottom über den Inspektor Verbindungen verbunden ist (wenn Sie Storyboard verwenden). Wenn dies der Fall ist und es immer noch nicht funktioniert, können Sie den alternativen Ansatz ausprobieren, bei dem Sie die untere Einschränkung des MapView-Objekts aus der Superview des Constarints aktualisieren.

Damit dies funktioniert, müssen Sie in der Lage sein, die untere Einschränkung des MapView zu identifizieren, indem Sie ihm einen Bezeichner geben. Schauen Sie dazu in der Document Outline des Storyboards durch die MapView-Constraints, finden Sie die untere Constraint, gehen Sie zum Size Inspector und geben Sie der Constraint einen Bezeichner, sagen wir "MapViewBottom".

Jetzt müssen Sie die Superview-Einschränkungen der MapView durchsehen, die richtige bestimmen und die Konstante ändern.

for constraint in yourMapView.superview!.constraints { 

    if constraint.identifier == "MapViewBottom" { 
     constraint.constant = flyImg.isHidden ? -flyImg.height : flyImg.height 
    } 
    } 

Anschließend können Sie die Ansicht rufen Einschränkungen neu zu berechnen, wenn

benötigt
view.layoutIfNeeded() 
+0

Warum iterieren Sie durch Einschränkungen? Sie sollten mit '@ IBOutlet's verbunden sein. – Mundi

+0

Wie gesagt, biete ich ihm eine alternative Möglichkeit an, Einschränkungen zu ändern. Ich bin mir bewusst, dass Sie sie über @IBOutlets ändern können, weshalb ich vorgeschlagen habe, zuerst zu überprüfen, ob sie im Connections Inspector korrekt referenziert werden. Wenn das immer noch nicht klappt, habe ich ihm diese andere Möglichkeit angeboten, dasselbe zu erreichen. – gwinyai

+0

@Mundi bitte sehen Sie meine Erklärung – gwinyai

0

Ich denke, man könnte zunächst die Konstante von mapBottom auf die Höhe des flyImg verringern müssen. Ändern Sie es anstelle von bt.mapBottom.constant -= bt.flyImg.height in den Standardkonstantenwert. Wenn es an den Seiten des Bildschirms fixiert ist, als es macht

bt.flyImg.isHidden = true 
bt.mapBottom.constant = 0 //if default value is 0. Just check it on storyboard. 
bt.view.layoutIfNeeded() 


bt.flyImg.isHidden = false 
bt.mapBottom.constant += bt.flyImg.height 
bt.view.layoutIfNeeded() 

Wenn es immer noch nicht funktioniert, bitte einfügen Code Detail Quelle, so dass wir konnten herausfinden, was los ist.

Verwandte Themen