Ist es möglich, die Höhe von UIPickerView zu ändern? Einige Anwendungen scheinen kürzere PickerViews zu haben, aber das Festlegen eines kleineren Frames scheint nicht zu funktionieren und der Frame ist im Interface Builder gesperrt.
ios
iphone
cocoa-touch
uikit
uipickerview
Steven Canfield
quelle
quelle
Antworten:
Es scheint offensichtlich, dass Apple nicht besonders zum Mucking mit der Standardhöhe von einlädt
UIPickerView
, aber ich habe festgestellt, dass Sie eine Änderung der Höhe der Ansicht erzielen können, indem Sie die vollständige Kontrolle übernehmen und beim Erstellen eine gewünschte Bildgröße übergeben, z.smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Sie werden feststellen, dass es in verschiedenen Höhen und Breiten zu visuellen Störungen kommt. Offensichtlich müssten diese Störungen entweder irgendwie umgangen werden oder eine andere Größe wählen, die sie nicht aufweist.
quelle
Keiner der oben genannten Ansätze funktioniert in iOS 4.0
Die Höhe von pickerView kann nicht mehr geändert werden. Es gibt eine Nachricht, die an die Konsole ausgegeben wird, wenn Sie versuchen, den Frame eines Pickers in 4.0 zu ändern:
Am Ende habe ich etwas ziemlich Radikales getan, um den Effekt eines kleineren Pickers zu erzielen, der sowohl in OS 3.xx als auch in OS 4.0 funktioniert. Ich habe den Picker so gewählt, wie es das SDK vorschreibt, und stattdessen ein durchgeschnittenes transparentes Fenster auf meinem Hintergrundbild erstellt, durch das der Picker sichtbar wird. Dann platzieren Sie einfach den Picker hinter meinem Hintergrund UIImageView (in Z-Reihenfolge), sodass nur ein Teil des Pickers sichtbar ist, der durch das transparente Fenster in meinem Hintergrund vorgegeben wird.
quelle
Es gibt nur drei gültige Höhen für
UIPickerView (162.0, 180.0 and 216.0)
.Sie können die Verwendung
CGAffineTransformMakeTranslation
undCGAffineTransformMakeScale
Funktionen richtig die Picker auf Ihren Komfort passen.Beispiel:
Mit dem obigen Code wird die Höhe der Auswahlansicht auf die Hälfte geändert und an der exakten Position (Links-x1, Oben-y1) neu positioniert.
quelle
Versuchen:
quelle
In iOS 4.2 und 4.3 funktioniert Folgendes:
Folgendes funktioniert nicht:
Ich habe eine App im App Store mit einer 3-Zeilen-Datumsauswahl. Ich dachte, die Höhenänderung wurde möglicherweise verhindert, weil Sie den Text unter dem Rand der Datumsauswahl sehen, aber dies passiert auch mit der normalen Datumsauswahl mit 216 Höhen.
Welches ist der Fehler? Deine Vermutung ist genauso gut wie meine.
Es gibt auch 3 gültige Höhen für
UIDatePicker
(undUIPickerView
) 162.0, 180.0 und 216.0. Wenn Sie eineUIPickerView
andere Höhe festlegen , wird beim Debuggen auf einem iOS-Gerät in der Konsole Folgendes angezeigt.quelle
Ab iOS 9 können Sie die
UIPickerView
Breite und Höhe frei ändern . Die oben genannten Transformations-Hacks müssen nicht verwendet werden.quelle
Ich habe festgestellt , dass Sie können die Größe des UIPickerView bearbeiten - nur nicht mit Interface Builder. Öffnen Sie die XIB-Datei mit einem Texteditor und stellen Sie die Größe der Auswahlansicht auf die gewünschte Größe ein. Der Interface Builder setzt die Größe nicht zurück und scheint zu funktionieren. Ich bin mir sicher, dass Apple die Größe aus einem bestimmten Grund gesperrt hat, sodass Sie mit verschiedenen Größen experimentieren müssen, um zu sehen, was funktioniert.
quelle
Vorteile:
UIPickerView
sich so verhalten, wie es sollteUIViewController
viewWillLayoutSubviews
zu skalieren / zu positionierenUIPickerView
UIPopover
Nachteile:
UIPickerView
pickerView viewForRow
, um die Transformation für die Unteransichten rückgängig zu machenLösung:
Unterklasse UIPickerView und überschreiben Sie die beiden Methoden mit dem folgenden Code. Es kombiniert Unterklassen, feste Höhe und den Transformationsansatz.
quelle
Eine einfache Möglichkeit, die sichtbare Höhe einer Auswahlansicht zu ändern, besteht darin, die Auswahl in eine UIView einzubetten, die Höhe der übergeordneten Ansicht an die Höhe anzupassen, die Sie für die Auswahl sehen möchten, und dann in der übergeordneten UIView im Schnittstellen-Generator "Clip-Unteransichten" zu aktivieren oder
view.clipsToBounds = true
in Code gesetzt.quelle
Clip Subviews
. Auch die Größe desUIPickerView
muss größer sein - und Sie müssen auf die Mitte Ihres Ziels zielenUIPickerView
, um im übergeordnetenUIView
UIPickerView
aus dem Code erstellt).Ich konnte keinem der oben genannten Ratschläge folgen.
Ich habe mir mehrere Tutorials angesehen und fand dieses am vorteilhaftesten:
Ich habe den folgenden Code hinzugefügt, um die neue Höhe innerhalb der "viewDidLoad" -Methode festzulegen, die in meiner App funktioniert hat.
Hoffe das war hilfreich!
quelle
Dies hat sich in iOS 9 stark geändert (in iOS 8 ist es ziemlich ähnlich zu dem, was wir hier sehen). Wenn Sie es sich leisten können, nur auf iOS 9 abzuzielen, ändern Sie die Größe nach Belieben
UIPickerView
, indem Sie den Rahmen festlegen. Gut!Hier ist es von iOS 9 Release Notes
quelle
Ich arbeite mit ios 7, Xcode 5. Ich konnte die Höhe der Datumsauswahl indirekt anpassen, indem ich sie in eine Ansicht einfügte. Die Höhe der Containeransichten kann angepasst werden.
quelle
Erstellen Sie eine Ansicht in IB oder Code. Fügen Sie Ihre Auswahl als Unteransicht dieser Ansicht hinzu. Ändern Sie die Größe der Ansicht. Dies ist in IB am einfachsten. Erstellen Sie Einschränkungen von der Ansicht zu ihrer Übersicht und von der Auswahl zu dieser neuen Ansicht.
Da sich der Picker um ihn herum krümmt, wird er über den oberen und unteren Rand der Ansicht verteilt. Sie können in IB sehen, wenn Sie der Ansicht obere und untere Einschränkungen aus der Auswahl hinzufügen. Es wird ein Standardbereich angezeigt, der etwa 16 Punkte über und unter dem Übersichtscontainer liegt. Stellen Sie die Ansicht so ein, dass sie abgeschnitten wird, wenn Sie dieses Verhalten nicht möchten (hässliche Warnung).
So sieht es bei 96 Punkten auf einem iPhone 5 aus. Der Picker mit dem Spillover ist ungefähr 130 Punkte hoch. Ziemlich dünn!
Ich verwende dies in meinem Projekt, um zu verhindern, dass sich der Picker auf eine unnötige Höhe ausbreitet. Diese Technik schneidet es ab und erzwingt ein engeres Überlaufen. Es sieht tatsächlich schlanker aus, etwas kompakter zu sein.
Hier ist ein Bild der Ansicht, das den Überlauf zeigt.
Hier sind die IB-Einschränkungen, die ich hinzugefügt habe.
quelle
Auch wenn die Größe nicht geändert wird, kann ein anderer Trick in der Situation hilfreich sein, in der sich der UIPicker am unteren Bildschirmrand befindet.
Man kann versuchen, es leicht nach unten zu bewegen, aber die mittlere Reihe sollte sichtbar bleiben. Dies hilft dabei, etwas Platz über dem Picker freizulegen, da die unteren Reihen außerhalb des Bildschirms liegen.
Ich wiederhole, dass dies nicht die Art und Weise ist, die Höhe der UIPicker-Ansicht zu ändern, sondern eine Vorstellung davon, was Sie tun können, wenn alle anderen Versuche fehlschlagen.
quelle
Ok, nachdem ich lange mit dem blöden Pickerview in iOS 4 zu kämpfen hatte, habe ich beschlossen, mein Steuerelement in eine einfache Tabelle umzuwandeln: Hier ist der Code:
Hier ist die .h-Datei dafür:
Jetzt müssen Sie nur noch eine Mitgliedsvariable in der Combobox-Ansicht erstellen, die die aktuelle Zeilenauswahl enthält, und wir können loslegen.
Genieße alle.
quelle
Sie können dies im Allgemeinen nicht in xib tun oder den Rahmen programmgesteuert einstellen. Wenn Sie jedoch die übergeordnete xib als Quelle öffnen und die Höhe von dort aus ändern, funktioniert dies. Klicken Sie mit der rechten Maustaste auf die xib, in der pickerview enthalten ist, suchen Sie pickerview und finden Sie Höhe, Breite usw. Ändern Sie in diesem Tag die Höhe dort und speichern Sie die Datei.
quelle
Soweit ich weiß, ist es unmöglich, die UIPickerView zu verkleinern. Ich habe auch noch keinen kürzeren gesehen, der irgendwo verwendet wird. Ich vermute, dass es eine benutzerdefinierte Implementierung war, wenn sie es geschafft haben, sie zu verkleinern.
quelle
Wenn Sie Ihre Auswahl in IB erstellen möchten, können Sie die Größe auf eine kleinere Größe ändern. Stellen Sie sicher, dass es immer noch richtig gezeichnet wird, da es einen Punkt gibt, an dem es abscheulich aussieht.
quelle
Swift : Sie müssen eine Unteransicht mit Clip zu den Grenzen hinzufügen
Dadurch sollte oben im Ansichts-Controller eine abgeschnittene Datumsauswahl mit 100 Höhen hinzugefügt werden.
quelle
Mein Trick: Verwenden Sie die Maskenebene von Datepicker, um datePicker sichtbar zu machen. Wie Sie sehen, ändern Sie einfach den Rahmen des Datepickes.
quelle
Ich verwende eine Maskenebene, um die Anzeigegröße zu ändern
quelle
In eine Stapelansicht einbetten. Die Stapelansicht ist eine Komponente, die Apple kürzlich in seinem iOS SDK hinzugefügt hat, um gitterbasierte Implementierungen in webbasierten Java-Skript-Front-End-Bibliotheken wie Bootstrap widerzuspiegeln.
quelle
Wie oben erwähnt, kann die
UIPickerView
Größe jetzt geändert werden. Ich möchte nur hinzufügen, dass ich keinen Erfolg damit hatte, den Höhenanker auf eine Konstante zu setzen, wenn Sie die Höhe von pickerView in einer tableView-Zelle ändern möchten. Die VerwendunglessThanOrEqualToConstant
scheint jedoch zu funktionieren.quelle
Nach einem langen Tag, an dem ich mich am Kopf gekratzt habe, habe ich etwas gefunden, das für mich funktioniert. Die folgenden Codes erstellen den UIDatePicker jedes Mal neu, wenn der Benutzer die Ausrichtung des Telefons ändert. Dadurch werden alle Störungen beseitigt, die der UIDatePicker nach einer Orientierungsänderung aufweist.
Da wir den UIDatePicker neu erstellen, benötigen wir eine Instanzvariable, die den ausgewählten Datumswert beibehält. Die folgenden Codes werden unter iOS 4.0 getestet.
quelle
Wenn Sie die Größe von UiPickerView festlegen möchten. Der obige Code wird sicherlich für dich funktionieren.
quelle
In iOS 5.0 funktionierte Folgendes:
Dadurch wurde eine Datumsauswahl erstellt, wie sie Apple in der Kalender-App verwendet, wenn ein neues Ereignis im Querformat erstellt wird. (3 Zeilen hoch statt 5.) Dies hat nicht funktioniert, als ich den Frame innerhalb der
initWithFrame:
Methode festgelegt habe, aber bisher funktioniert es, wenn ich ihn mit einer separaten Methode festgelegt habe.quelle
für iOS 5:
wenn Sie einen kurzen Blick auf die UIPickerView Protocol Reference
du wirst es finden
Ich denke, es ist der erste, den Sie suchen
quelle
pickerView:rowHeightForComponent:
ist die Delegatmethode, um die Höhe jeder Zeile zu bestimmen - nicht die Höhe der Auswahlansicht.