2012-10-23 28 views
1

如何以編程方式指定UISegmentedControl的位置?設置框架什麼也不做。它看起來像mySegmentedControl.frame返回按鈕的框架,而不是「邊界矩形」。以編程方式指定UISegmentedControl的位置

我應該注意我正在使用的分段控件是通過界面構建​​器添加的。

編輯 - 更多信息:所以我剛剛瞭解到分段控件通常會進入UIToolbar之類的內容。所以我創建了一個IBOutlet對故事板爲我創建的工具欄的引用。當我登錄這個工具欄的位置時,我可以看到y位置與我想要的不同。但是,設置此工具欄的框架似乎並未移動它。

+2

你試過了mySegmentedControl.center嗎?只是猜測,你是否想要在UIBarButtonItem中指定UISegmentedControl的位置?確保您的IBOutlet設置正確,並且在xib或故事板加載完成後嘗試訪問它。 – brynbodayle

+0

@bbodayle感謝您的建議。我登錄並嘗試設置中心屬性。不幸的是,它沒有移動分段控制。對我來說,分段控件需要進入其他東西(比如工具欄)。請參閱問題中的其他信息。 – SundayMonday

+0

你可以發佈一個示例項目嗎? – brynbodayle

回答

2

設置框架是正確的方法。你的項目還有其他問題。你可以用一個UIButton和一個UISegmentedControl一個簡單的單一視圖項目測試:

- (IBAction)buttonTapped:(id)sender { 
    self.segmentedControl.frame = ((UIButton*)sender).frame; 
    ((UIButton*)sender).hidden = YES; 
} 

這將設置有相同的位置&大小的按鈕,分段控制,然後隱藏按鈕。

1

奇怪的是,你不能只改變x或y值,你必須改變整個框架。

我在應用程序中使用合成聲音,並在聲音播放之前有延遲。如果在低於iOS7的情況下運行,我隱藏分段控件和標籤。但是這在控制過去的屏幕上留下了一道縫隙。該代碼將下一個分段控件移動到原始位置。

if (SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(@"7.0")) { 

      // Hide the delay control 
      self.chooseDelaySegmentedControl.hidden = YES; 
      self.targetSoundDelayText.text = @""; 

      // Move the segmented control up 
      CGRect scoringTypeFrame = self.chooseScoringTypeSegmentedControl.frame; 
      scoringTypeFrame.origin.y = scoringTypeFrame.origin.y - 70.0f; 
      self.chooseScoringTypeSegmentedControl.frame = scoringTypeFrame; 

      CGRect scoringTypeTextFrame = self.scoringChoiceText.frame; 
      scoringTypeTextFrame.origin.y = scoringTypeTextFrame.origin.y - 70.0f; 
      self.scoringChoiceText.frame = scoringTypeTextFrame; 

} 
相關問題