2013-01-24 78 views
2

我有幾個自定義按鈕設置在故事板上,我試圖在代碼中重新創建,但不知何故,即使在我的CGRectMake函數中使用相同的參數,我也沒有獲得正確的位置。另一個問題是,自動調整掩碼在代碼中不起作用,因爲我將左側,底部和右側支柱突出顯示,因此按鈕在3.5英寸和4英寸兩種屏幕尺寸下都保持位置,但是通過代碼創建的按鈕不會做這個。我從故事板發佈XML,然後發佈我的代碼以顯示我的意思。在代碼之前,對我正在嘗試做的一些背景進行了說明。我有我的項目通過故事板設置的多個控制器/視圖中的這些自定義按鈕..我試圖創建一個單獨的控制器現在與控制器中的按鈕編程,然後讓我的其他控制器繼承此,以防萬一我需要修改,這將只需要進行一次代碼等價的故事板UIButton

這裏是我的代碼:

這是XML從故事板:

<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" id="iz0-cT-TPO"> 
          <rect key="frame" x="0.0" y="357" width="106" height="60"/> 
          <autoresizingMask key="autoresizingMask" flexibleMinY="YES"/> 
          <fontDescription key="fontDescription" type="boldSystem" pointSize="15"/> 
          <state key="normal" image="Anotpressed.png"> 
           <color key="titleColor" red="0.19607843459999999" green="0.30980393290000002" blue="0.52156865600000002" alpha="1" colorSpace="calibratedRGB"/> 
           <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> 
          </state> 
          <state key="highlighted" image="Apressed.png"> 
           <color key="titleColor" white="1" alpha="1" colorSpace="calibratedWhite"/> 
          </state> 

         </button> 

我在我的視圖控制器等效代碼爲:

(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    UIButton *AButton=[UIButton buttonWithType:UIButtonTypeCustom]; 
    [AButton setFrame:CGRectMake(0, 357, 106, 60)]; 
    [AButton setAutoresizingMask:UIViewAutoresizingFlexibleTopMargin]; 
    [AButton setImage:[UIImage imageNamed:@"Anotpressed"] forState:UIControlStateNormal]; 
    [AButton setImage:[UIImage imageNamed:@"Apressed"] forState:UIControlStateHighlighted]; 
    [AButton setEnabled:YES]; 
    [self.view addSubview:AButton]; 
} 

目前,我正在做的是將故事板按鈕留在原地,然後從具有編程按鈕的視圖控制器繼承以查看它們是否相同,並且我發現我的編程按鈕遠遠高於故事板按鈕,儘管它們有相同的座標等。

我對這個問題的詳細程度表示歉意,但我想提供一個我想要達到的完整圖像。首先,如何以編程方式重新創建相同的按鈕,其次是(繼承/子類化)在我的項目中重新創建這些按鈕的正確方法?

+0

TL | DR,但也許是因爲你正在viewDidAppear上創建按鈕:而不是在viewDidLoad上做,你正在跳過一些定向事件或類似的東西。當以編程方式創建對象時,在viewDidLoad上創建它們,並且只使用viewDidAppear:設置每次視圖出現在屏幕中時都需要的狀態。在這種情況下,每當您從該視圖控制器中關閉全屏模式視圖控制器時,您將創建一個新按鈕。 –

+0

如果該狀態永不改變,您也可以在viewDidLoad中執行此操作。如果在用戶與視圖進行交互時確實發生了更改,並且您希望在下次視圖顯示時重置狀態,請在viewDidAppear:上執行此操作。這樣想一想:即使用戶在選項卡視圖控制器中更改選項卡,而不是每次都創建,您的視圖仍可以保存在內存中。所以這裏有兩個事件:創作和展示。ViewDidLoad用於創建視圖時的視圖,viewDidAppear:用於顯示視圖的視圖。 –

回答

2

flexibleMinY指出,如果父視圖調整大小,故事板中的視圖可以重新定位。可能發生的情況是視圖以特定大小加載,但調整大小以適應可用的屏幕空間。例如,如果故事板是爲iPhone 4的屏幕尺寸設計的,但顯示在新的iPhone 5屏幕分辨率上。

因爲您在viewDidAppear中添加按鈕,調整大小已經發生。按鈕已經稍微向下移動,並且不再處於原始位置。

您可以嘗試添加viewDidLoad中的按鈕,該按鈕可能在顯示和調整原始視圖之前被調用。還要將相同的autoresizingMask添加到您的按鈕。

或確保您的原始按鈕的y位置是固定的而不是靈活的。

+0

我在viewDidLoad中添加了按鈕,沒有什麼改變。我如何以編程方式執行flexibleMinY,以及如何通過故事板完成此操作,因爲在故事板中單擊/啓用了哪些內容會導致此問題? –

+0

在您編程創建的按鈕上設置'autoresizingMask'到'UIViewAutoresizingFlexibleTopMargin'。或者在「尺寸檢查器」的界面構建中爲現有按鈕禁用靈活的上邊距。 –

+0

如果你注意到了代碼,那就是我現在正在做的事情。我已經有了與故事板上的按鈕完全相同的座標和寬度以及高度的UIViewAutoresizingFlexibleTopMargin。然而,當按鈕位於相同位置時,按鈕的位置有很大不同。當您將我的XML與我的Objective C代碼進行比較時,是否還有其他可能遺漏的內容? –