我可以在垂直方向显示UISegmentedControl对象吗?

xer*_*ron 19 iphone sdk uisegmentedcontrol

是否有人可以教我如何在垂直方向上显示UISegmentedControl对象,而不是在水平方向?

Ben*_*ieb 25

您始终可以修改分段控件的转换.

segmentedControl.transform = CGAffineTransformMakeRotation(M_PI/2.0);


Mir*_*les 21

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
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Swift 2版本:

for view in segmentedControl.subviews {
    for subview in view.subviews {
        if subview.isKindOfClass(UILabel) {
            subview.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI / 2.0))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 此代码依赖于UISegmentedControl的内部(未记录)实现.当Apple更改此控件的实现时,它很容易失败.即使是一个简单的更改,例如在您正在寻找的UILabel实例和顶层之间插入额外的视图层也会破坏此代码. (2认同)

Red*_*ing 5

该控件仅是水平的。来自UISegementedControl文档:

UISegmentedControl 对象是由多个段组成的水平控件,每个段充当一个独立的按钮。分段控件提供了一种将多个控件组合在一起的紧凑方法。

您必须将其作为自定义控件来执行。