2010-08-16 75 views

回答

20

對Ben的回答+1,雖然旋轉分段控制也旋轉文本里面。從不畏懼!我們只需要旋轉內部標籤,就像這樣:

NSArray *arr = [segmentedControl subviews]; 
    for (int i = 0; i < [arr count]; i++) { 
    UIView *v = (UIView*) [arr objectAtIndex:i]; 
    NSArray *subarr = [v subviews]; 
     for (int j = 0; j < [subarr count]; j++) { 
      if ([[subarr objectAtIndex:j] isKindOfClass:[UILabel class]]) { 
       UILabel *l = (UILabel*) [subarr objectAtIndex:j]; 
       l.transform = CGAffineTransformMakeRotation(- M_PI/2.0); //do the reverse of what Ben did 
      } 
     } 
    } 

斯威夫特2版:

for view in segmentedControl.subviews { 
    for subview in view.subviews { 
     if subview.isKindOfClass(UILabel) { 
      subview.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI/2.0)) 
     } 
    } 
} 
+1

這適用於標籤,但如果您的控件具有圖像,則不起作用。在這種情況下,我會按照Ben的建議,然後在OSX預覽工具(或Photoshop)中旋轉圖像,而不是在代碼中旋轉UIImageView。 – 2013-04-18 05:32:52

+1

此代碼依賴於UISegmentedControl的內部(未記錄)實現。每當Apple更改此控件的實現時,它都很容易失敗。即使是一個簡單的改變,比如在你正在尋找的UILabel實例和頂層之間插入額外的視圖層,也會破壞這些代碼。 – Arda 2016-03-07 21:08:27

+0

@Arda它可能會中斷,但如果情況如此,創建自己的分段控制器需要大約10分鐘的時間,所以要做到這一點並享受它。無論如何,如果發生某些變化,您總能找到辦法做到這一點。 – Sethmr 2016-11-16 19:01:10

4

此控件只是水平的。從UISegementedControl文檔:

一個UISegmentedControl對象是由多個 區段,每個區段作爲 離散按鈕起作用的 水平控制。分段控制 提供了將 分組在一起的多種控制的緊湊手段。

您必須將其作爲自定義控件來執行此操作。

22

您可以隨時修改分段控件上的變換。

segmentedControl.transform = CGAffineTransformMakeRotation(M_PI/2.0);

+0

+1用於回答問題:)。我很想知道旋轉分段控制的可用性。 – RedBlueThing 2010-08-16 06:23:52

+0

是的,我沒有通過判斷這是否是一個好主意;-) – 2010-08-16 13:09:02

+0

@ ben-gottlieb令人欽佩的質量:) – RedBlueThing 2010-08-17 02:04:05

0

我發現可可控制之下控制它看起來不錯。這是一個自定義控件,看起來像UIControl的一個子類。

smverticalsegmentedcontrol

但如果你問我,我可能會嘗試不同的方法,我將創建一個列寬(44px)一tabelview並保持它在容器中的孩子,可以將其調整到一個角落的容器中,自定義單元格,並在每行的抽頭中添加我的列表,在contentview的詳細信息視圖中加載相應的內容。沒有嘗試過,會盡快發佈結果。

相關問題