Irgendwann zwischen dem viewWillAppear Ihres View-Controllers: & viewDidAppear: Die Navigationsleiste positioniert Ihre titleView neu und passt sie bei Bedarf an. Es kann unzensiert enden, weil die Navigationsleiste es vorzieht, die Titelansicht nicht so anzupassen, dass sie zwischen die Schaltflächen passt. Es scheint zu versuchen, die Titelansicht zu zentrieren, wenn es klein genug ist, aber wenn nicht, wird deine Titelansicht außermittig verschoben, und dann denke ich, dass nur als letztes Mittel die Größe geändert wird. Der Effekt ist, dass die Titelansicht den gesamten Abstand zwischen den beiden Schaltflächen einnimmt, wenn ihre Textausrichtung zentriert ist, wird sie in der Mitte zentriert, jedoch nicht zentriert in Bezug auf den gesamten Bildschirm. Sie können dies in Ihrem Screenshot sehen.
Eine Antwort ist, dass Sie Ihre Titelansicht schmaler machen, damit die Navigationsleiste sie zentrieren kann. Versuchen Sie also, wenn Sie Ihren TitelView.frame festlegen, etwa 160 statt 180. Es saugt, dass, wenn Sie die Ansicht programmatisch wie Sie erstellen, eine Schätzung für diese Breite in den Code eingeben muss. Was gut wäre, ist eine Möglichkeit, diesen Raum zu maximieren, während er zentriert bleibt.
Es ist möglich, mit der titleView zu beginnen, die die Bildschirmbreite ist, dann, nachdem die Navigationsleiste titleView.frame ändert, aktualisieren Sie es wieder selbst in der Ansicht des Viewers viewDidAppear :. Mit den angepassten Titeln "View.frame.origin.x" und "size.width" zusammen mit der Bildschirmbreite können Sie den größten der linken rechten Ränder berechnen und dann den Wert von "origin.x" auf die Größe "width.width" auf die Bildschirmbreite einstellen das mal 2. Das wird aber erst wirksam, nachdem die gedrückte Ansicht animiert wurde und die Verschiebung danach sichtbar ist. Sie könnten die titleView in viewWillAppear verbergen: dann in viewDidAppear einblenden: nachdem Sie es zentriert haben, wird es statt mit einer exzentrischen titleView, die dann verschoben wird, hineingleiten ohne einen Titel, der dann erscheint.
Eine bessere Möglichkeit besteht darin, Ihre titleView Ihre eigene Unterklasse von UIView (oder UILabel oder whichver) zu machen und setFrame zu überschreiben, um die Größe zu ändern, um in seiner Superansicht zentriert zu bleiben. Wenn ich das jemals selbst mache, poste ich es hier. Oder vielleicht kennt jemand anders einen anderen Ort, um den Rahmen von titleView zu ändern, nachdem er aktualisiert wurde, aber bevor die Ansicht ohne eine Unterklasse der Ansicht eingeblendet wird.
anyone? jemand Hilfe! –
Ich habe das gleiche Problem! Buttons auf der linken oder rechten Seite bewirken, dass die Titelansicht erneut zentriert wird, auch nachdem ich sie genau in layoutSubviews gesetzt habe. – quantumpotato