簡體   English   中英

在導航欄中放置基於UIBarButtonItem的自定義視圖,而不使用默認的水平填充

[英]Placing a custom view based UIBarButtonItem in the navigation bar without default horizontal padding

如何刪除自定義左右UINavigationBar項目左側和右側的水平填充? iOS默認設置似乎有~10個填充點。

我正在自定義左右導航欄按鈕(我已經放棄嘗試設置自己的backButtonItem,所以我只是使用leftBarButtonItem)。

在任何一種情況下(左或右),按下這些自定義按鈕表示Apple似乎在leftBarButtonItem的左側和rightBarButtonItem的右側保留了一些填充; 無論我使用UIButton的自定義背景和圖像屬性的寬度,我將其放置在左/右欄按鈕項目內作為其自定義視圖。

由於UIBarButtonItems沒有我可以訪問的“框架”,我無法將它們放在超級視圖中,就像我可以正常的UIViews一樣。

有關如何刪除此默認填充的任何建議? 請參閱附加的屏幕截圖,看看我正在嘗試將其縮小到零寬度。 在屏幕截圖中,加號圖標顯示為向右移動,因為我給了它一個插圖; 但突出顯示的背景圖像,也可能是使用插圖,正在右側修剪。

請參見圖片: https//skitch.com/starbaseweb/rj2e5/ios-simulator

作為參考,這是我如何創建我的自定義UIBarButtonItem(在這種情況下,它是正確的按鈕):

- (UIBarButtonItem *)customAddButtonItemWithTarget:(id)target action:(SEL)action {
  UIButton *customButtonView = [UIButton buttonWithType:UIButtonTypeCustom];

    customButtonView.frame = CGRectMake(0.0f, 0.0f, 45.0f, 44.0f);

    [customButtonView setBackgroundImage:
        [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Normal.png"] 
        forState:UIControlStateNormal];
    [customButtonView setBackgroundImage:
        [UIImage imageNamed:@"bgNavBarButton-OutsideRight-Highlighted.png"] 
        forState:UIControlStateHighlighted];

    [customButtonView setImage:
        [UIImage imageNamed:@"bgNavBarButton-Add-Normal.png"] 
        forState:UIControlStateNormal];
    [customButtonView setImage:
        [UIImage imageNamed:@"bgNavBarButton-Add-Highlighted.png"] 
        forState:UIControlStateHighlighted];

    [customButtonView addTarget:target action:action 
        forControlEvents:UIControlEventTouchUpInside];

    UIBarButtonItem *customButtonItem = [[[UIBarButtonItem alloc] 
        initWithCustomView:customButtonView] autorelease];
    [customButtonView setImageEdgeInsets:UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f)];

    //customButtonItem.imageInsets = UIEdgeInsetsMake(0.0f, 10.0f, 0.0f, 0.0f);

    return customButtonItem;    
}

55如上所述,我采用的解決方案是基於對不同但非常相關的問題的答案: 如何調整UIToolBar左右填充 它也可以通過(並依賴於)iOS5來促進,它允許您在左側或右側設置多個按鈕,而不是僅設置一個按鈕。

以下是刪除自定義左按鈕項左側的填充的示例:

UIBarButtonItem *backButtonItem // Assume this exists, filled with our custom view

// Create a negative spacer to go to the left of our custom back button, 
// and pull it right to the edge:
UIBarButtonItem *negativeSpacer = [[UIBarButtonItem alloc] 
    initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace 
    target:nil action:nil];
negativeSpacer.width = -5; 
// Note: We use 5 above b/c that's how many pixels of padding iOS seems to add

// Add the two buttons together on the left:
self.navigationItem.leftBarButtonItems = [NSArray 
    arrayWithObjects:negativeSpacer, backButtonItem, nil];

這樣,導航欄中左側欄按鈕項的左側填充就消失了!

注意 :這在iOS5和iOS6中對我有用。 鑒於iOS7與公眾演示有很大的不同,那些擁有iOS7早期種子的人應該測試一下如此無意的東西,比如這個黑客,實際上會繼續為iOS6以外的人工作。

我試過這個並且它有效:

1)創建一個自定義的UIToolbar子類,它在-drawRect:中什么都不做,並且不是不透明的,並且有backgroundColor = [UIColor clearColor]。

2)使用工具欄作為自定義視圖創建自定義UIBarButtonItem。

3)將您的按鈕添加到自定義工具欄。

4)在您的自定義工具欄中覆蓋-layoutSubviews並執行您自己的間距。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM