有人可以教我如何使 UISegmentedControl 对象以垂直方向显示,而非水平方向吗?
您可以随时修改分段控件的变换。
segmentedControl.transform = CGAffineTransformMakeRotation(M_PI / 2.0);
+1给Ben的回答,尽管旋转分段控件也会旋转内部文本。不要担心!我们只需要旋转内部标签,像这样:
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))
}
}
}
这个控件只能水平使用。根据UISegementedControl文档:
一个 UISegmentedControl 对象是一个水平控件,由多个片段组成,每个片段都作为一个离散按钮的功能。分段控件提供了一种紧凑的方式来将多个控件组合在一起。
您将需要将其作为自定义控件实现。
更新Ben的回答,以适应更现代的Swift版本。
segmentedControl.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))
注意将值转换为CGFloat类型并使用更现代的Double.pi(也可以缩短为.pi)。
M_PI / 2.0
而不是M_PI_2
? - BFeherUISegmentedControl
对此非常完美,因为它可以跟踪所选/取消选择状态,并且一次只允许选择一个(或没有)。 - SaltyNuts