2014-11-24 120 views
6

enter image description herenavigationItem setRightBarButtonItems間距過寬

我試圖減少這兩個欄按鈕項目之間的距離。

我使用

navigationItem setRightBarButtonItems 

設置兩個按鈕的項目,但他們相距甚遠也。

我已經嘗試添加負空間,我嘗試添加一個間隔符後,固定空間,靈活的空間。沒有看到文檔中的任何內容,說你不能改變間距,但我找不到方法。

感謝您的幫助提前。

編輯後回答:

兆鍾燦的回答是完全正確的,但因爲我並沒有完全得到它起初我以爲我會分享讓我意識到,他是完全正確的代碼。

如果你把它全部在一個塊,這是他(非常正確)的答案是什麼樣子:

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]; 

對我來說,這樣做的好處是,它提供了一個窺探蘋果公司實際上是如何設置一些觀點來偏向於他們只想使用它們。所以如果你想做高度定製的用戶界面,你必須做許多UIView操作來解決他們(可能)無意的障礙。

這個故事的寓意:如果視圖不排隊適合你嘗試重新從UIView的水平了視圖,然後將它添加到您要在顯示它的視圖

再次感謝兆仲燦!

+2

檢查圖像尺寸寬度,看它是否是非常大的。 – gabbler 2014-11-24 06:23:25

+0

謝謝。按鈕的大小是我放入按鈕的圖像的大小。所以這是決定間距的其他因素。 – addzo 2014-11-24 12:30:49

回答

3

我以前做過這個。

您必須爲按鈕創建您自己的UIView。 導致默認的uibarbuttonitem有一些填充一個左側和右側。

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都是ViewIconBtn類。 在我的項目中,我在右側創建了3個導航按鈕。

UIBarButtonItem space15用於調整邊界和最右邊的barbutton之間的填充。

+0

好的。這對我來說很有意義。 ViewIconBtn是UIButton的一個子類嗎?或者是你添加了UIButton元素的UIView的直接子類? – addzo 2014-11-24 12:49:25

+0

雅,我做了ViewIconBtn是一個與它的按鈕uiview – 2014-11-24 12:50:21

+0

有趣的。稍後我會試一試。感謝您的快速回復!我很感激! – addzo 2014-11-24 12:58:30

0

您提供的解決方案效果很好。如果你想簡化它,你可以直接使用UIButton作爲自定義視圖,而不用將其嵌入到UIView中。

我發現我的新按鈕之間的距離其實比標準的蘋果的距離,所以我用你的例子嵌入在UIViewUIButton但改變了UIView的框架要稍微大少一點。

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