2014-04-07 11 views
5

W UIToolbar, dodałem UITextField na środku paska (która zostanie dodana jako UIBarButtonItem) z innym UIBarButtonItem (przycisk działania) obok niej. Dodałem elastyczne przyciski na pasku po lewej i prawej stronie. Wygląda świetnie na portret, ale kiedy obracam się do pejzażu, centralizuje je i wygląda dobrze, ale potrzebuję pola tekstowego, aby rozciągnąć, by wypełnić szerokość i wcisnąć ostatni przycisk w prawo - dokładnie tak, jak w Wiadomościach - na iPhone i iPad.Regulacja szerokości UITextField wypełnić pasek w krajobrazie

Pomyślałem, że Auto Layout załatwi sprawę, ale stany Apple nie mogą tworzyć ograniczeń dla UIBarButtonItem s. I rzeczywiście, gdy wybiorę dowolny przycisk paska lub pole tekstowe, nie będzie można tworzyć żadnych ograniczeń.

Czy możesz mi powiedzieć, jak to osiągnąć? Dzięki!

enter image description here

EDIT: Próbowałem kilka innych kombinacji ze stałymi/elastycznych przestrzeniach. Kiedy nie dodawać dowolne pole tekstowe i przycisk akcji są nasunięte na lewo:
enter image description here

Jeżeli zamiast zrobić stałe przestrzenie, wygląda dokładnie takie same jak powyżej z 0 szerokościach, lub jeśli ustawić szerokość, to oczywiście je popchnie. Ta ostatnia przestrzeń po prawej stronie nie ma żadnego skutku - nie jest ustawiona po prawej stronie, więc znika z ekranu.

Próbowałem ustalonej przestrzeni po lewej stronie i elastycznej po prawej stronie, z środkową jedną stałą (lub bez środkowej), i wygląda jak na powyższym zrzucie ekranu. Potem zmienił środkowy elastycznych i okazało się to tak:
enter image description here

Jeśli zmienię pierwszy elastyczny, nikt w środku (lub jeśli dodam ustalonej wartości), a flxed po prawej stronie, zostanie przeniesiony na prawo:
enter image description here

Jeśli pierwszy jest elastyczny, w środku jest elastyczny, a prawo jest stała, to jak to wygląda:
enter image description here

We wszystkich przypadkach szerokość pole tekstowe pozostaje tą samą wartością statyczną e jak to było pierwotnie ustawione w scenorysie. Myślę, że problem polega na tym, że kiedy ustawiasz szerokość, przeciągając ramkę, nie ma niebieskich wskazówek do przyciągania, aby zawsze pozostała taka sama szerokość.

Czy brakowało mi kombinacji przestrzeni? Jeśli nie mogę zaimplementować pożądanego zachowania w konstruktorze interfejsów, w jaki sposób można to osiągnąć w kodzie?

Odpowiedz

9

Aby uzyskać pole tekstowe poziomo rozciąganie, musiałem ręcznie ustawić jego frame w viewWillAppear a także podczas zmiany orientacji - Kiedyś viewWillTransitionToSize:withTransitionCoordinator::

[coordinator animateAlongsideTransition:^(id<UIViewControllerTransitionCoordinatorContext> __nonnull context) { 
    self.textField.frame = CGRectMake(0, 0, self.navigationController.navigationBar.frame.size.width - self.actionButton.width - 55, self.inputTextField.frame.size.height); 
} completion:^(id<UIViewControllerTransitionCoordinatorContext> __nonnull context) { 
}]; 


Poprzednie rozwiązanie (już nie pracuje dla mnie w najnowszych systemów operacyjnych):

Dodaj ten w viewDidLoad:

self.textField.autoresizingMask = UIViewAutoresizingFlexibleWidth; 

enter image description here

+0

nie działa dla mnie w Xcode 6.2/systemów iOS 8: the UITextField pozostaje stałym rozmiarze, więc pasek narzędzi jest odcięty w niewielkich rozmiarów i nie jest na tyle szeroki, w normalnym rozmiarze. – 7stud

+0

Dowiedziałem się, dlaczego to nie * działało * dla mnie: patrzyłem na wyniki w Preview, gdzie można zobaczyć jednocześnie iPhone'a i iPada w tym samym czasie, patrz tutaj (ignoruj ​​fakt, że mówi Swift: samouczek nie ma nic wspólnego z Swift): https://www.youtube.com/watch?v=p5wDdvdDbM. Wygląda na to, że podgląd pokazuje tylko to, co zrobiłeś w IB, więc Preview nie widzi kodu w odpowiedzi. W rezultacie w Preview mój TextField nie rozciągał się, ale kiedy uruchomiłem (Run'ed ?!) mój kod na różne urządzenia (kliknij urządzenie na pasku przeskoczeniowym po prawej stronie przycisku Stop i wybierz inne urządzenie), ... – 7stud

+0

... TextField dopasował się do dostępnej przestrzeni. Dzięki! – 7stud

Powiązane problemy