2013-04-25 59 views
1

有很多關於自定義視圖作爲UIButton定製UIBarButtonItem的討論。這很清楚。到目前爲止,我還沒有找到什麼,我感到驚訝的是,沒有提到用於處理界面旋轉的自定義UIBarButtonItems - 它是旋轉iPhone時的常見行爲,條形按鈕被垂直擠壓。但是,如果您以普通方式(通過調用initWithCustomView:方法)自定義UIBarButtonItem,它將在旋轉到橫向方向後保持非擠壓狀態。有沒有解決方法?UIBarButtonItem和界面旋轉的自定義

回答

1

那麼,我發現解決方案處理UIApplicationDidChangeStatusBarOrientationNotification在自定義UIBarButtonItem類相當不錯。

0

我認爲你應該用新的方向圖像和文本重建UIBarButtonItem(你的自定義UIButton),或者重置自定義視圖的框架。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
{ 
    UIButton *rightItemButton = (UIButton *)self.navigationItem.rightBarButtonItem.customView; 
    //resize the frame 
    if (isLandscape) { 

    } else if (isPortrait) { 
     .... 
    } 
} 
+0

你的意思是改變按鈕的屬性從'didRotateFromInterfaceOrientation:'視圖控制器的方法?我認爲從代碼設計的角度來看它非常醜陋 - 視圖控制器除了調整按鈕是足夠的工作,這些按鈕是作爲uinvigationitem的子項的barbuttons的自定義視圖,這些按鈕位於uinvaigationbar上 - 瘋狂!我希望蘋果有更好的解決方法... – peetonn 2013-04-25 10:10:10

+0

是的,因爲這是您的自定義視圖,您應該自己控制它,也可以覆蓋ViewControllers中的 - (void)layoutSubviews以重置任何子視圖的大小和位置 – shanegao 2013-04-25 12:45:36

+0

好吧,是的,我同意......但在我看來,這些優秀的曲子限制了我們不使用「好」的代碼設計 - 例如,在這種情況下,我看到更合乎邏輯的設計這樣一個按鈕,它將完全自動處理它的內容本身。我認爲特別是如果蘋果提供任何類型的'didAdjustFrameForNewOrientation:'調用或者像這樣的話,這種情況就可以解決。 – peetonn 2013-04-25 13:51:53

0

如果你可以添加來自IB的UIBarButtonItem的(你不必以編程方式創建它),你可以設置的彈簧和支柱,讓您的默認行爲。這個解決方案爲我工作。

+0

hm。只有寬度和圖像插入可以定製。但無論如何,如果我需要在具有自定義視圖的'UIBarButtonItem'中需要,那麼我該如何解決? (它是我的情況) – peetonn 2013-04-25 10:59:13

+0

問題是如果你想在IB導航欄中使用自定義的UIBarButton,你可以在導航欄上拖動一個UIBarButtonItem,然後在UIBarButtonItem中拖動一個UIButton,然後你可以自定義你喜歡的UIButton (背景,標題等)。對於你的情況,我認爲你可以創建一個自定義的UIView,其中有一個按鈕(或其他視圖),並設置spring和struts來獲得你的行爲。注:我沒有測試這種情況,但我沒有看到任何理由爲什麼這不起作用。 – danypata 2013-04-25 11:06:47

+0

hm,看起來像可以工作,如果你有一個'UINavigationController'在你的xib。然而,它不是我的情況。但無論如何感謝提示! – peetonn 2013-04-25 11:17:12