2015-06-15 30 views
5

Mam UIViewController z UIToolBar poniżej UINavigationBar i UITableView poniżej. Jedynym UIBarButtonItem na moim UIToolBar jest UISegmentedControl jak na poniższym zrzucie ekranu: enter image description hereUIToolbar z UISegmentedControl AutoLayout (/ pełna szerokość)

Jednak, jak mogę dostać UISegmentedControl/UIBarButtonItem aby rozciągnąć do wypełnienia UIToolBar jak w aplikacji App Store? enter image description here

Należy pamiętać, że obsługuję również tryb poziomy, więc będzie on musiał automatycznie rozciągać się, aby dopasować się do nowej szerokości po obróceniu urządzenia. Jest to coś, co miałem nadzieję osiągnąć dzięki AutoLayout, ale o ile wiem, nie mogę użyć AutoLayout wewnątrz UIToolBar.

Wszelkie sugestie (z wyjątkiem zastąpienia UIToolbar za pomocą UIView)?

+0

wystarczy użyć UIView zamiast uitoolbar – sim

+0

@sim to co staram się unikać, ale może mam spaść z powrotem, że jeśli nie ma sposobu, aby to działało – Aleksander

+0

W tym przypadku musisz ustawić szerokość kontrolera uisegment w kodzie i obsługiwać zmiany orientacji urządzenia, aby zaktualizować jego szerokość, myślę, że jest to trudniejsze niż po prostu skorzystaj z funkcji uiview z autolayout – sim

Odpowiedz

7

Utworzono pasek narzędzi z podzielonym na segmenty elementem sterującym, a następnie podzielono na segmenty 320. Następnie ustawiam elastyczne prowadnice układu po każdej stronie, aby wymusić podzielenie segmentu na środek. To wygląda dobrze w pionie, ale podzielona na segmenty kontrola nie będzie rozciągać się na krajobraz.

Portrait (zawiera konfigurację IB i symulator) enter image description here

Landscape (obejmuje również instalację IB i symulator) enter image description here

Wydaje się, że sklep aplikacja ma segmentową kontroli, który jest ustawiony w pewnej szerokości a następnie widok nie może się obracać. Rozumiem, że chcesz, aby podzielona na segmenty kontrolka zmieniała szerokość wraz z układem, ale niestety obecnie nie jest to możliwe z automatycznym układem.

Moja sugestia byłaby, jeśli naprawdę chciałbyś, aby podzielona na segmenty kontrolka zmieniła szerokość przy obrocie, programowo ustawi szerokość, gdy urządzenie obróci się w krajobraz.

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration { 
    if(UIDeviceOrientationIsLandscape(UIDevice.currentDevice().orientation)) 
    {    
     //set segmented control to landscape 
    } 

    if(UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation)) 
    { 
     //set segmented control to portrait width 
    } 
} 

Jeszcze jedno, jeśli nie kończy się przy użyciu tego obrotu urządzenie rzeczy, będziesz jeszcze potrzebował tych elastycznych przekładek w IB, aby utrzymać segmentowa kontrola w środku paska

+1

Wczytanie interfejsu pośredniego jest przestarzałe. – sim

+0

To naprawdę świetne rozwiązanie. Nie wiem nawet, czy aktualizacja szerokości 'UISegmentedControl' jest już konieczna, ponieważ wygląda to całkiem nieźle. – Aleksander

5

można zrobić z kod. Coś takiego:

@interface ViewController() 
@property (strong, nonatomic) IBOutlet UIToolbar *toolbar; 
@property (strong, nonatomic) IBOutlet UISegmentedControl *segment; 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _segment.translatesAutoresizingMaskIntoConstraints = NO; 
    [_toolbar addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-8-[_segment]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_segment)]]; 
    [_toolbar addConstraint:[NSLayoutConstraint constraintWithItem:_segment 
                 attribute:NSLayoutAttributeCenterY 
                 relatedBy:NSLayoutRelationEqual 
                  toItem:_toolbar 
                 attribute:NSLayoutAttributeCenterY 
                 multiplier:1. 
                  constant:0.]]; 
} 

@end  
+0

Wypróbuję Twoje rozwiązanie, gdy wrócę do mojego komputera i zaktualizuję zaakceptowaną odpowiedź, jeśli okaże się, że działa.Tylko mała wskazówka: IBOutlets powinny być "słabe", a nie "silne" :) – Aleksander

+0

Właśnie skopiowałem/wkleiłem to z mojego przykładowego projektu, który nie powinien być problemem, który zgaduję =) –

+0

Działa doskonale! na iOS 9 .. dziękuję Ale ustawiłem IBOletlets na słabe – Pierre