2015-04-10 15 views
6

mogę dodać do mojego navigationItem titleView bardzo łatwo w kodzie:Dodawanie navigationItem.titleView w serii ujęć zawodzi

UIImageView *navImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"nav_logo"]]; 
UIView *titleView = [[UIView alloc] initWithFrame:navImageView.frame]; 
[titleView addSubview:navImageView]; 
self.navigationItem.titleView = titleView; 

Jednak staram się zrobić to w moim serii ujęć, a jestem braku marnie.

Oto co zrobiłem:

  1. Przeciągnij i upuść UIView na szczycie mojej nawigacji przedmiot VC.
  2. Przeciągnij i upuść UIImageView na szczycie UIView
  3. dodawania szerokość/wysokość/czołowych/Top ograniczeń
  4. ustawić właściwość obrazu UIImageView

ja również ustawić tło mojego UIView do czerwony (no dobrze, bardziej jak spalona pomarańcza), aby zilustrować problem.

Oto jak to wszystko czyni się:

enter image description here

Dziwię to nie było tak trudne. Jakieś pomysły?

Odpowiedz

5

Niemożliwe jest posiadanie wiązań autolayout dla elementów nawigacyjnych w scenorysie. Wierzę, że faktycznie przeciągasz widoki na rzeczywisty kontroler widoku. Możesz tylko przeciągnąć element barButtonItems do elementu navigationItem.

Alternatywnym rozwiązaniem jest

  1. Tworzenie widoku w osobnej XIb bez użyciu autolayout
  2. Załaduj XIB w kodzie
  3. setTranslatesAutoresizingMaskIntoConstraints do prawdziwej
  4. Przypisanie titleView do widok

Z mojego doświadczenia wynika, że ​​używanie autolayout z dowolnymi widokami w pasku nawigacyjnym nie działa dobrze i prowadzi do nieoczekiwanych rezultatów. Na przykład wystąpiły błędy, w których prezentowanie elementu UIActivityViewController spowodowało dodanie nieoczekiwanych ograniczeń do titleView widoku navigationItem.

Przed: enter image description here

Po przedstawieniu UIActivityViewController i omijając Krok 3: enter image description here

15

W serii ujęć konstruktora interfejsu

  • Wybierz kontroler widoku
  • W inspektora atrybutu (⌘⌥ 4), w sekcji "Symulowane dane" dla wybieraka "Górny pasek" wybierz jeden z nich z pasków nawigacyjnych
  • Następnie powinieneś być w stanie przeciągnąć UIView nad tytułem na Storyboard
  • Można zmienić „Top Bar” Ustawienia Powrót do „wnioskować” jeśli chcesz

Oto obraz z serii ujęć po przeciągnięciu UIView nad tytułem:

after dragging UIView over the title

0

Ten dziwny problem ma związek z klas wielkości.

Faktycznie, miałem ten sam problem i rozwiązanie było:

  1. Ustaw klasę rozmiar dla ujęć do Any,Any
  2. Przeciągnij i upuść wgląd elementu paska nawigacji.
  3. Resetuj klasę wielkości swojego storyboardu.

Wszystko działa jak urok!

Myślę, że dodanie widoku do elementu nawigacyjnego o klasie wielkości niezaznaczonej jako Any,Any powoduje problem.

Mam nadzieję, że to działa dla wszystkich, ponieważ to było naprawdę okropne: [.

1

Dla tych, którzy znaleźli się w walce z problemem dodawania własnego widoku lub UIButtonu wewnątrz UIBarButtonItem w Xcode 8, tutaj jest rozwiązanie: Xcode akceptuje przeciąganie tylko w właściwości widoku kontrolera teraz (Xcode 7 może przeciągnąć bezpośrednio do UINavigationItem). Jeśli usuniesz kontroler o numerze view, umożliwi to przeciągnięcie elementów na pasek nawigacji. Stwórz więc nowy pusty kontroler nawigacyjny, usuń główny widok wewnątrz kontrolera widoku root, przeciągnij elementy na pasek nawigacji, skopiuj ten element nawigacyjny (nie sam pasek) i wklej go do kontrolera docelowego, zastąpi on twoje stare elementy nawigacyjne. Po usunięciu tego pustego kontrolera. ZYSK!

Wygląda na to, że zespół Apple Xcode tworzy nowe zadania dla programistów z jeszcze większą pasją niż ich główny produkt.

Powiązane problemy