2012-10-25 41 views
0

我有一個這樣的>BarButtonItem調整爲不明原因

self.button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone 
                  target:self 
                  action:@selector(doAction)]; 

後來初始化一個按鈕,我附上一個自定義的背景吧,像>

[self.button setBackgroundImage:[UIImage imageNamed:@"customNavBar_button_right_enabled"] 
          forState:UIControlStateNormal 
          barMetrics:UIBarMetricsDefault]; 

,它puting到導航欄。

[self.navigationItem setRightBarButtonItem:self.button 
            animated:NO]; 

此圖像有固定的大小。我希望該按鈕具有完全自定義的背景圖像,而不需要使用UIEdgeInsets調整大小。我不想調整大小。但由於某種原因,它的行爲就像它的插頁是活躍的,並且它的尺寸被調整爲具有更大的寬度,大致中間的一半圖片大大拉伸以提供更寬的按鈕。

這是怎麼發生的?我怎樣才能防止這種情況發生?

回答

1

實現使用自定義圖像的欄按鈕項的最簡單的方式是通過:

  1. 將一個UIButton到故事板。
  2. 將按鈕類型設置爲自定義併爲該按鈕設置圖像。
  3. 將按鈕拖到工具欄上。

故事板會自動創建UIBarButtonItem並將您的UIButton添加爲子視圖。或者如果你不想使用故事板,你可以實現以下內容:

// Initialize the UIButton 
UIImage *buttonImage = [UIImage imageNamed:@"buttonImage.png"]; 
UIButton *aButton = [UIButton buttonWithType:UIButtonTypeCustom]; 
[aButton setImage:buttonImage forState:UIControlStateNormal]; 
aButton.frame = CGRectMake(0.0, 0.0, buttonImage.size.width, buttonImage.size.height); 

// Initialize the UIBarButtonItem 
UIBarButtonItem aBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:aButton]; 

// Set the Target and Action for aButton 
[aButton addTarget:self action:@selector(aButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; 

希望它有幫助!

編輯:不要忘了添加aBarButtonItem到UIToolbar。

+0

我採用了編程方法,如果您需要UI佈局管理的靈活性,故事板過於僵化。問題在於解決方案能夠解決問題,但在其他地方會出現更多問題,至少目前如此。我有其他地方的代碼依賴於事實,即按鈕是UIBarButtonSystemItem,而不是UIButton。 但也許我會克服它。 我想如果我無法擺脫內置的cap insets,那麼最好將它們明確設置爲零。 –