21

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

4

5 回答 5

28

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

segmentedControl.transform = CGAffineTransformMakeRotation(M_PI / 2.0);

于 2010-08-16T03:40:13.773 回答
23

+1 for Ben's answer, although rotating the segmented control also rotates the text inside. Never fear! We just have to rotate the inside labels, like so:

    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 version:

for view in segmentedControl.subviews {
    for subview in view.subviews {
        if subview.isKindOfClass(UILabel) {
            subview.transform = CGAffineTransformMakeRotation(CGFloat(-M_PI / 2.0))
        }
    }
}
于 2011-06-07T18:18:35.713 回答
4

此控件仅是水平的。从UISegementedControl文档:

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

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

于 2010-08-16T03:36:19.877 回答
2

更新 Bens 答案以获得更现代的 swift 版本。

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

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

于 2020-01-25T06:26:59.990 回答
0

我在可可控件中发现了下面的控件,看起来不错。它是一个自定义控件,看起来像 UIControl 的子类。

smverticalsegmentedcontrol

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

于 2015-08-11T15:05:45.013 回答