Czy można zmienić wysokość UIPickerView? Niektóre aplikacje wydają się mieć krótsze PickerViews, ale ustawienie mniejszej ramki nie działa, a ramka jest zablokowana w Interface Builder.
ios
iphone
cocoa-touch
uikit
uipickerview
Steven Canfield
źródło
źródło
Odpowiedzi:
Wydaje się oczywiste, że Apple nie zachęca szczególnie do mucking z domyślną wysokością
UIPickerView
, ale odkryłem, że możesz osiągnąć zmianę wysokości widoku, przejmując pełną kontrolę i przekazując żądany rozmiar klatki w czasie tworzenia, np .:smallerPicker = [[UIPickerView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 120.0)];
Przekonasz się, że na różnych wysokościach i szerokościach występują wizualne usterki. Oczywiście te usterki należałoby jakoś obejść lub wybrać inny rozmiar, który ich nie wykazuje.
źródło
Żadne z powyższych podejść nie działa w iOS 4.0
Nie można już zmieniać rozmiaru wysokości pickerView. Jest komunikat, który zostaje zrzucony do konsoli, jeśli spróbujesz zmienić ramkę selektora w 4.0:
Skończyło się na tym, że zrobiłem coś dość radykalnego, aby uzyskać efekt mniejszego selektora, który działa zarówno w systemie 3.xx, jak i OS 4.0. Zostawiłem selektor na dowolny rozmiar, który SDK zdecyduje, i zamiast tego utworzyłem przezroczyste okno na moim obrazie tła, przez które staje się widoczny. Następnie po prostu umieść selektor za (w kolejności Z) moim tłem UIImageView, tak aby widoczna była tylko część selektora, co jest podyktowane przezroczystym oknem w moim tle.
źródło
Istnieją tylko trzy ważne wysokości
UIPickerView (162.0, 180.0 and 216.0)
.Możesz użyć funkcji
CGAffineTransformMakeTranslation
i,CGAffineTransformMakeScale
aby odpowiednio dopasować selektor dla swojej wygody.Przykład:
Powyższy kod zmienia wysokość widoku selektora na połowę i ponownie ustawia go na dokładnej pozycji (Left-x1, Top-y1) .
źródło
Próbować:
źródło
W iOS 4.2 i 4.3 działa to:
Nie działa:
Mam aplikację w sklepie z aplikacjami z 3-wierszowym selektorem dat. Wydawało mi się, że można było zapobiec zmianie wysokości, ponieważ tekst znajduje się pod obramowaniem selektora dat, ale dzieje się tak również w przypadku normalnego selektora dat o wysokości 216.
Jaki jest błąd? Twoje przypuszczenia są równie dobre jak moje.
Istnieją również 3 ważne wysokości dla
UIDatePicker
(iUIPickerView
) 162,0, 180,0 i 216,0. Jeśli ustawiszUIPickerView
wysokość na cokolwiek innego, zobaczysz następujące informacje w konsoli podczas debugowania na urządzeniu z systemem iOS.źródło
Od iOS 9 możesz dowolnie zmieniać
UIPickerView
szerokość i wysokość. Nie ma potrzeby korzystania z wyżej wymienionych hacków transformacji.źródło
I odkryli, że można zmieniać wielkość UIPickerView - nie tylko z interfejsem budowniczego. otwórz plik .xib w edytorze tekstu i ustaw dowolny rozmiar widoku selektora. Konstruktor interfejsu nie resetuje rozmiaru i wydaje się działać. Jestem pewien, że Apple zablokowało rozmiar z jakiegoś powodu, więc będziesz musiał eksperymentować z różnymi rozmiarami, aby zobaczyć, co działa.
źródło
Zalety:
UIPickerView
zachowuje się tak, jak powinnoUIViewController
viewWillLayoutSubviews
aby przeskalować / ustawićUIPickerView
UIPopover
Niedogodności:
UIPickerView
pickerView viewForRow
aby cofnąć transformację dla podwidokówRozwiązanie:
Podklasa UIPickerView i Zastąp te dwie metody przy użyciu następującego kodu. Łączy podklasy, stałą wysokość i podejście transformacyjne.
źródło
Łatwym sposobem na zmianę widocznej wysokości widoku selektora jest osadzenie selektora w UIView, dostosowanie wysokości widoku nadrzędnego do wysokości, którą chcesz widzieć selektora, a następnie włączenie „Clip Subviews” w Interface Builder w nadrzędnym UIView lub
view.clipsToBounds = true
w kodzie.źródło
Clip Subviews
. również rozmiarUIPickerView
musi być wyższy - i musisz wycelować w środek swojego,UIPickerView
aby był widoczny wewnątrz rodzicaUIView
UIPickerView
z kodu).Nie mogłem zastosować się do żadnej z powyższych rad.
Obejrzałem wiele samouczków i uznałem, że ten jest najbardziej korzystny:
Dodałem następujący kod, aby ustawić nową wysokość w metodzie „viewDidLoad”, która działała w mojej aplikacji.
Mam nadzieję, że to było pomocne!
źródło
To bardzo się zmieniło w iOS 9 (w iOS 8 jest bardzo podobne do tego, co widzimy tutaj). Jeśli możesz sobie pozwolić na kierowanie tylko na iOS 9, zmień rozmiar
UIPickerView
według własnego uznania, ustawiając jego ramkę. Dobry!Tutaj pochodzi z informacji o wydaniu iOS 9
źródło
Pracuję z ios 7, Xcode 5. Udało mi się pośrednio dostosować wysokość selektora dat, zamykając go w widoku. Wysokość widoków kontenerów można regulować.
źródło
Utwórz widok w IB lub w kodzie. Dodaj selektor jako widok podrzędny tego widoku. Zmień rozmiar widoku. Najłatwiej to zrobić w IB. Utwórz ograniczenia z widoku do jego nadzoru i od selektora do tego nowego widoku.
Ponieważ Picker zakrzywia się wokół, rozlewa się na górę i dół widoku. Możesz zobaczyć w IB, kiedy dodasz górne i dolne ograniczenia z selektora do widoku, pokazuje on standardową przestrzeń, około 16 punktów powyżej i poniżej kontenera Superview. Ustaw widok tak, aby go przyciąć, jeśli nie chcesz tego zachowania (brzydkie ostrzeżenie).
Oto, jak to wygląda przy 96 punktach wysokości na iPhonie 5. Picker z efektem spillover ma około 130 punktów wysokości. Całkiem chudy!
Używam tego w moim projekcie, aby zapobiec rozszerzaniu się zbieracza na niepotrzebną wysokość. Ta technika przycina go i wymusza ciaśniejszy wyciek. W rzeczywistości wygląda na bardziej zwartą.
Oto obraz widoku przedstawiający efekt spillover.
Oto ograniczenia IB, które dodałem.
źródło
Nawet jeśli nie zmienia rozmiaru, inna sztuczka może pomóc w sytuacji, gdy UIPicker znajduje się na dole ekranu.
Można spróbować przesunąć go nieco w dół, ale środkowy rząd powinien pozostać widoczny. Pomoże to odsłonić trochę miejsca nad selektorem, ponieważ dolne rzędy będą poza ekranem.
Powtarzam, że nie jest to sposób na zmianę wysokości widoku UIPicker, ale pewne pojęcie, co można zrobić, jeśli wszystkie inne próby zawiodą.
źródło
Ok, po długich zmaganiach z głupim pickerviewem w iOS 4, postanowiłem zmienić sterowanie na prostą tabelkę: oto kod:
Oto plik .h do tego:
to wszystko, teraz jedyne, co pozostało, to utworzenie zmiennej składowej w widoku combobox, która będzie przechowywać bieżący wybór wiersza, i dobrze jest iść.
Ciesz się wszystkim.
źródło
Zasadniczo nie możesz tego zrobić w xib lub ustawić ramkę programowo, ale jeśli otworzysz jego nadrzędny xib jako źródło i zmienisz wysokość stamtąd, to działa.Kliknij prawym przyciskiem myszy xib, w którym znajduje się widok wyboru, Wyszukaj widok wyboru i możesz znaleźć wysokość, szerokość itp. w tym tagu Zmień wysokość, a następnie zapisz plik.
źródło
O ile wiem, nie można zmniejszyć UIPickerView. Nie widziałem też nigdzie używanego krótszego. Domyślam się, że była to niestandardowa implementacja, jeśli udało im się ją zmniejszyć.
źródło
Jeśli chcesz utworzyć selektor w IB, możesz zmienić jego rozmiar ponownie na mniejszy. Sprawdź, czy nadal rysuje poprawnie, ponieważ przychodzi moment, w którym wygląda ohydnie.
źródło
Szybki : Musisz dodać widok podrzędny z klipem do granic
Powinno to spowodować dodanie obciętego selektora dat o wysokości 100 w górnej części kontrolera widoku.
źródło
Moja sztuczka: użyj warstwy maski DatePicker, aby dataPicker była widoczna. jak widzisz, po prostu zmień ramkę datepicke.
źródło
Używam warstwy maski, aby zmienić rozmiar wyświetlania
źródło
Osadź w widoku stosu. Widok stosu to składnik niedawno dodany przez firmę Apple w ich SDK systemu iOS w celu odzwierciedlenia implementacji opartych na siatce w bibliotekach interfejsu WWW opartych na skryptach java, takich jak bootstrap.
źródło
Jak wspomniano powyżej,
UIPickerView
można teraz zmieniać rozmiar. Chcę tylko dodać, że jeśli chcesz zmienić wysokość pickerView w komórce tableView, nie udało mi się ustawić kotwicy wysokości na stałą. Jednak użycielessThanOrEqualToConstant
wydaje się działać.źródło
Po długim dniu drapania się w głowę znalazłem coś, co działa na mnie. Poniższe kody odtworzą UIDatePicker za każdym razem, gdy użytkownik zmieni orientację telefonu. Spowoduje to usunięcie wszelkich usterek, które ma UIDatePicker po zmianie orientacji.
Ponieważ odtwarzamy UIDatePicker, potrzebujemy zmiennej instancji, która zachowa wybraną wartość daty. Poniższe kody są testowane na iOS 4.0.
źródło
Jeśli chcesz ustawić rozmiar UiPickerView. Powyższy kod na pewno Ci się spodoba.
źródło
W iOS 5.0 dostałem do pracy:
Stworzyło to selektor dat, taki jak ten, którego Apple używa w aplikacji Kalendarz podczas tworzenia nowego wydarzenia w trybie poziomym. (3 rzędy wysokości zamiast 5.) To nie zadziałało, gdy ustawiłem ramkę w ramach
initWithFrame:
metody, ale jak dotąd działa, gdy ustawiłem ją za pomocą oddzielnej metody.źródło
dla iOS 5:
jeśli wziąć szybki rzut oka na UIPickerView Protocol Reference
znajdziesz
Myślę, że to pierwszy, którego szukasz
źródło
pickerView:rowHeightForComponent:
jest metodą delegata do decydowania o wysokości każdego wiersza, a nie o wysokości widoku selektora.