2014-11-24 12 views
6

enter image description hererozstaw navigationItem setRightBarButtonItems zbyt szeroki

Staram się zmniejszyć dystans pomiędzy tymi dwoma elementami przycisk paska.

Używam

navigationItem setRightBarButtonItems 

ustawić dwie pozycje przycisków, ale są one zbyt daleko od siebie.

Próbowałem dodać przestrzeń ujemną, próbowałem dodać po nim spacera, stałą przestrzeń, elastyczne miejsce. Nie widzisz niczego w dokumentach, które mówią, że nie możesz zmienić odstępu, ale nie mogę znaleźć odpowiedzi.

Dzięki za pomoc z góry.

EDIT PO: odbieranie

Siu Chung Chan był dokładnie poprawne, ale ponieważ nie dość dostać go w pierwszej chwili pomyślałem, że podzielę się z kodu, który uświadomił mi, że miał całkowitą rację.

Jeśli było umieścić to wszystko w jednym bloku jest to, co jego (bardzo poprawne) odpowiedź będzie wyglądać następująco:

UIView *filterBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
UIButton *filterBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
[filterBtn addTarget:self action:@selector(someMethod) forControlEvents:UIControlEventTouchUpInside]; 
[filterBtn setBackgroundImage:[UIImage imageNamed:@“someicon”] forState:UIControlStateNormal]; 
[filterBtnView addSubview:filterBtn]; 
UIBarButtonItem *btnFilter = [[UIBarButtonItem alloc] initWithCustomView:filterBtnView]; 

UIView *selectBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
UIButton *selectBtn = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 35, 35)]; 
[selectBtn setBackgroundImage:[UIImage imageNamed:@“someothericon”] forState:UIControlStateNormal]; 
[selectBtn addTarget:self action:@selector(someOtherMethod:) forControlEvents:UIControlEventTouchUpInside]; 
[selectBtnView addSubview:selectBtn]; 
UIBarButtonItem *btnSelect = [[UIBarButtonItem alloc] initWithCustomView:selectBtnView]; 

[self.navigationItem setRightBarButtonItems:@[btnFilter, btnSelect] animated:YES]; 

Dla mnie piękno jest to, że daje zajrzeć do jak niektóre z poglądów są faktycznie tworzone przez Apple, aby być stronniczy, jak chcieli je wykorzystać. Więc jeśli chcesz robić wysoce spersonalizowane interfejsy, musisz wykonać wiele manipulacji UIView, aby ominąć ich (być może) niezamierzone bariery.

Morał z tej historii:. Jeśli widok nie jest w kolejce tuż za próby odtworzenia widok z poziomu UIView do góry, a następnie dodanie go do widoku, który chcesz wyświetlić go w

Dzięki ponownie Siu Chung Chan!

+2

Sprawdzić szerokość rozmiar, aby sprawdzić, czy jest bardzo duża. – gabbler

+0

Dzięki. Rozmiar przycisku jest wielkości obrazu, który umieszczam w przycisku. Więc to jest coś, co decyduje o odległości. – addzo

Odpowiedz

3

Zrobiłem to wcześniej.

Musisz utworzyć własne UIView dla przycisku. Powoduje, że domyślny uibarbuttonitem ma pewne wypełnienie po lewej i prawej stronie.

ViewIconBtn* searchViewIconBtn = [[ViewIconBtn alloc] initWithImage:[UIImage imageNamed:@"searchIcon.png"]]; 
[searchViewIconBtn.btn addTarget:self action:@selector(toSearch) forControlEvents:UIControlEventTouchUpInside]; 
UIBarButtonItem* btnSearch = [[UIBarButtonItem alloc] initWithCustomView:searchViewIconBtn]; 

UIBarButtonItem *space15 = [NegativeSpacer negativeSpacerWithWidth:15]; 
    [self.navigationItem setRightBarButtonItems:[NSArray arrayWithObjects:space15,btnWishList,btnPost,btnSearch, nil]]; 

btnWishList, btnPost, btnSearch są obie klasy ViewIconBtn. w moim projekcie utworzyłem 3 przyciski nawigacyjne po prawej stronie.

Przestrzeń UIBarButtonItem15 służy do regulacji wypełnienia pomiędzy granicą i skrajnym prawym przyciskiem.

+0

Ok. To ma dla mnie sens. Czy ViewIconBtn jest podklasą UIButton? Czy jest to bezpośrednia podklasa UIView, do której dodano elementy Uibutton? – addzo

+0

Ya, zrobiłem ViewIconBtn jest uiview z przyciskiem na nim –

+0

Interesujące. Spróbuję trochę później. Dziękuję za szybką odpowiedź! Doceniam to! – addzo

0

Oferowane przez ciebie rozwiązanie działa świetnie. Jeśli chcesz go uprościć, możesz faktycznie użyć UIButton jako widoku niestandardowego bezpośrednio, bez umieszczania go w postaci UIView.

okazało się, że odległość między moimi nowymi przyciskami jest rzeczywiście nieco mniej niż standardowe jabłkowego odległości więc użyłem swój przykład z UIButton osadzonego w UIView ale zmienił klatkę UIView być nieco większy.

UIView *filterBtnView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 45, 35)]; 
0
- (void)addTwoRightBarButtonItems 
{ 
    UIButton *reloadBtn = [UIButton buttonWithType:UIButtonTypeCustom]; 
    reloadBtn.frame = CGRectMake(0.0, 0.0, 45.0, 44.0); 
    [reloadBtn setImage:[UIImage imageNamed:@"reload_icon"] forState:UIControlStateNormal];men 
    reloadBtn.imageEdgeInsets = UIEdgeInsetsMake(0, 20, 0, 0); 
    // reloadBtn.backgroundColor = [UIColor redColor]; 

    UIButton *menuBtn = [UIButton buttonWithType:UIButtonTypeSystem]; 
    menuBtn.frame = CGRectMake(45.0, 0.0, 45.0, 44.0); 
    UIImage *image = [[UIImage imageNamed:@"menu_icon"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; 
    [menuBtn setImage:image forState:UIControlStateNormal]; 
    //menuBtn.backgroundColor = [UIColor greenColor]; 

    UILabel *badgeLbl = [[UILabel alloc]initWithFrame:CGRectMake(25, 8, 18, 18)]; 
    badgeLbl.layer.cornerRadius = 9; 
    [badgeLbl.layer setMasksToBounds:YES]; 
    badgeLbl.backgroundColor = [UIColor colorWithRed:255.0/255.0 green:197.0/255.0 blue:0.0 alpha:1.0]; 
    badgeLbl.textColor = [UIColor colorWithRed:136.0/255.0 green:94.0/255.0 blue:16.0/255.0 alpha:1.0]; 
    badgeLbl.font = [UIFont fontWithName:@"Lato-Bold" size:9.f]; 
    badgeLbl.textAlignment = NSTextAlignmentCenter; 
    badgeLbl.hidden = YES; 
    [menuBtn addSubview:_lblBadge]; 

    UIBarButtonItem *offset = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:nil action:nil]; 
    offset.width = -10.0; 

    UIView *v = [[UIView alloc]initWithFrame:(CGRect){.size.width = 90.0,.size.height = 44.0}]; 
    [v addSubview:reloadBtn]; 
    [v addSubview:menuBtn]; 

    UIBarButtonItem *reloadItem = [[UIBarButtonItem alloc] initWithCustomView:v]; 

    [self.navigationItem setRightBarButtonItems:@[offset,reloadItem]]; // 
} 

enter image description here

Powiązane problemy