2014-10-20 62 views
11

以我UINavigation條加入到XIB與多個UIViews的左側和右側欄按鈕項的定位中使用時是遙遠:UIBarButton項目在獨立視圖

Navigation bar in additiona UIView in XIB

XIB中的視圖只是有一個視圖控制器的出口,但不是主視圖。它通過所示:

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

我還有一個是直接綁定到視圖控制器,它的視角特性簡單的觀點 - 預期 - 看起來只是正常的。

Normal navigation bar

所有的意見都自動佈局。約束很好。我嘗試了許多不同的東西,但無法提出修復(或者說原因)。導航欄和項目只是普通的香草酒吧按鈕項目,沒有任何像外觀代理等...

在7.1 SIM卡一切看起來很正常。

以前有人看過這個嗎?

由於

[編輯]

我發現了一個解決方案,但不是這個原因:

如果我代替

[UIView transitionFromView:self.view toView:self.settingsView duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft completion:NULL]; 

這增加了新的視圖的一個子視圖UIWindow,

使用這個:

[UIView transitionWithView:self.view duration:0.2 options:UIViewAnimationOptionTransitionFlipFromLeft animations:^{ 
    [self.view addSubview:self.settingsView]; 
} completion:nil]; 

它將新視圖添加爲現有UIViewControllers視圖的子視圖,一切都很好。

我不知道這一個bug,如果UINavigationBars包含在動態添加到窗口視圖以一種奇怪的方式渲染...

+0

同一問題。我有一個自定義視圖和動畫來顯示,但左側和右側的項目都觸摸邊緣。 – Geekoder 2015-07-24 09:43:26

+0

根據文檔,'transitionFromView:toView:duration:options:completion:'默認將'fromView'替換爲'toView'。您的解決方案改爲添加子視圖。這可能是導致問題的區別,特別是'fromView'是控制器的視圖 – Aris 2017-06-12 09:39:01

回答

2

不知道什麼用UIBarButtonItem發生。它應該通過自動佈局進行安排,並且必須很好地工作。可能是與其他或被誤導的約束衝突之一。

如果您無法解決問題。我還有一個解決方案給你。您需要在VC中以編程方式創建UIBarButtonItem

這個想法是在添加UIBarButtonItem之前從左側和右側填充分配空間。

下面的代碼將指導你做的伎倆。

UIBarButtonItem *leftPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[leftPadding setWidth:5]; // Adjust width for padding from left side. 

UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemAdd target:self action:@selector(addButtonTapped:)]; 
[self.navigationItem setLeftBarButtonItems:@[leftPadding, addButton]]; 


UIBarButtonItem *rightPadding = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemFixedSpace target:self action:nil]; 
[rightPadding setWidth:10]; // Adjust width for padding from right side. 

UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem: 
           UIBarButtonSystemItemDone target:self action:@selector(doneButtonTapped:)]; 

[self.navigationItem setRightBarButtonItems:@[rightPadding, doneButton]]; 
+0

這當然是有效的,但是在iOS 7中,事情看起來不正確,因爲額外的填充會進一步偏移酒吧按鈕項目。 我仍然在尋找這種行爲的原因。不想檢測iOS 7只是爲iOS 8添加填充。我想蘋果將在未來的更新中改變這一點...... – k1th 2014-10-21 19:16:02

0

使用下面的代碼添加按鈕,它肯定會工作。

CGRect frameimg = CGRectMake(0, 0, 60, 30); 
UIButton *someButton = [[UIButton alloc] initWithFrame:frameimg]; 
//[someButton setBackgroundImage:image3 forState:UIControlStateNormal]; 
[someButton setTitle:@"Update" forState:UIControlStateNormal]; 
[someButton addTarget:self action:@selector(updateProfile) 
    forControlEvents:UIControlEventTouchUpInside]; 
[someButton setShowsTouchWhenHighlighted:YES]; 
UIBarButtonItem *menuButton =[[UIBarButtonItem alloc] initWithCustomView:someButton]; 
self.navigationItem.rightBarButtonItem = menuButton; 
0

問題出在layoutMargins

似乎你的UINavigationBar有零毛利。 它應該從每邊8分。