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

时间:2010-08-16 03:16:47

标签: iphone sdk uisegmentedcontrol

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

5 个答案:

答案 0 :(得分:25)

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

segmentedControl.transform = CGAffineTransformMakeRotation(M_PI / 2.0);

答案 1 :(得分: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
            }
        }
    }

Swift 2版本:

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

答案 2 :(得分:4)

此控件仅为水平。来自UISegementedControl文档:

  

UISegmentedControl对象是一个   水平控制由多个   段,每个段起作用   一个离散的按钮。分段控制   提供紧凑的分组方式   一起控制。

您必须将此作为自定义控件执行此操作。

答案 3 :(得分:1)

更新Bens答案可获得更现代的Swift版本。

segmentedControl.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))

注意将值转换为CGFloat并使用更现代的Double.pi(也可以缩短为.pi。

答案 4 :(得分:0)

我在cocoa控件中找到了以下控件,看起来不错。它是一个自定义控件,看起来像是UIControl的子类。

smverticalsegmentedcontrol

但是如果你问我,我可能会尝试不同的方法,我会创建一个列宽(44px)的tabelview并将其保存为容器中的子项,并可以将其与容器的一个角对齐,自定义单元格并列出我的列表并点击每一行,在内容视图的详细信息视图中加载相应的内容。没试过,会尽快发布结果。