Für meinen Job helfe ich bei der Gestaltung einer iOS App und so habe ich kürzlich angefangen mit Swift zu arbeiten. In der App haben wir drei verschiedene Elemente: ein Google Maps-Element und zwei Grafiken. Ich möchte es so machen, dass, wenn Sie auf eines dieser Elemente drücken, wird die Größe angepasst, um auf den Bildschirm zu passen, und wenn Sie den Bildschirm erneut drücken, werden sie auf ihre ursprüngliche Größe zurückkehren.Swift: Größe des Elements programmatisch auf verschiedenen Geräten finden
Füllen Sie den Bildschirm ist kein Problem, und ich habe bereits erfolgreich implementiert. Wenn Sie jedoch erneut drücken, erscheint das Element kleiner oder größer als es ursprünglich war, je nachdem, auf welchem Gerät Sie es ausführen. Momentan minimiere ich es, indem ich die Attribute height und width des Elements verwende und diese auf die ursprünglichen Werte für diese Attribute zurückstelle, wenn der Benutzer das Vollbildelement drückt. Es scheint jedoch, dass diese fest codiert sind, anstatt für jedes Gerät, auf dem Sie sich befinden, dynamisch erstellt zu werden, und dies ist der Grund, warum es nicht korrekt zu seiner ursprünglichen Größe zurückkehren wird.
Hier ist zur Zeit, was ich in meinem Code haben:
@IBAction func mapButtonClicked(sender: AnyObject) {
if mapExpanded == false {
mapView.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
mapButton.frame = CGRectMake(0, 0, self.view.frame.width, self.view.frame.height)
mapExpanded = true
} else {
mapView.frame = CGRectMake(0, 0, oldMapWidth, oldMapHeight)
mapButton.frame = CGRectMake(0, 0, oldMapWidth, oldMapHeight)
mapExpanded = false
}
}
wo oldMapWidth = self.view.mapView.width und oldMapHeight = self.view.mapView.height.
Ich habe versucht, es relativ zum Bildschirm zu ändern, aber das funktioniert nur auf einem einzigen Gerät und gibt die gleichen Probleme beim Wechsel zu einem anderen Tablet. Gibt es ein anderes Attribut, das die Höhe und Breite nach dem Kompilieren angibt, so dass es für das aktuelle Gerät, auf dem es sich befindet, korrekt ist?
Sind Sie sicher, dass die alte MapHeight und Breite das sind, was Sie erwarten? Erstellen Sie ein Protokollereignis, wenn Sie das MapButton zum ersten Mal drücken, und protokollieren Sie die Breite und Höhe der aktuellen Ansicht und vergleichen Sie diese mit dem, was Sie in diesen beiden Variablen gespeichert haben. Ich nehme an, dass sie unterschiedlich sein werden ... Die einfachste Lösung wäre, diese zwei Variablen innerhalb des mapButtonClick zu setzen, kurz bevor Sie den Vollbildmodus machen. Dann sollte die Rückkehr gut funktionieren, egal welches Gerät. – Putz1103
Sie waren nicht, was ich dachte, sie würden sein. Sie entsprechen ihrer Größe in der Ansicht Beliebig auf dem Storyboard, die bei der Ausführung nicht auf den Geräten angezeigt wird. Die Frage wurde jedoch beantwortet, danke für einen Blick. – tdolphay
Die Frage wurde 17 Minuten beantwortet, nachdem ich kommentiert und Ihnen einen Rat gegeben hatte (was der Antworter anscheinend ziemlich wörtlich genommen hat). – Putz1103