【发布时间】:2020-06-07 08:06:00
【问题描述】:
有没有人可以教我如何在垂直方向而不是水平方向显示 UISegmentedControl 对象?
【问题讨论】:
标签: iphone sdk uisegmentedcontrol
有没有人可以教我如何在垂直方向而不是水平方向显示 UISegmentedControl 对象?
【问题讨论】:
标签: iphone sdk uisegmentedcontrol
您始终可以修改分段控件上的转换。
segmentedControl.transform = CGAffineTransformMakeRotation(M_PI / 2.0);
【讨论】:
M_PI / 2.0 而不是M_PI_2?
UISegmentedControl 非常适合,因为它跟踪选中/取消选中的状态,并且一次只允许一个(或没有)选择。
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))
}
}
}
【讨论】:
此控件仅是水平的。来自UISegementedControl 文档:
一个 UISegmentedControl 对象是一个 水平控制由多个 段,每个段作为 一个独立的按钮。分段控制 提供了一种紧凑的分组方式 多个控件。
您必须将其作为自定义控件执行。
【讨论】:
更新 Bens 答案以获得更现代的 swift 版本。
segmentedControl.transform = CGAffineTransform(rotationAngle: CGFloat(Double.pi / 2))
注意将值转换为 CGFloat 并使用更现代的 Double.pi(也可以缩短为 .pi。
【讨论】:
我在可可控件中发现了下面的控件,看起来不错。它是一个自定义控件,看起来像 UIControl 的子类。
但是如果你问我,我可能会尝试一种不同的方法,我会创建一个列宽(44px)的 tabelview 并将它作为一个子项保存在容器中,并且可以将它与容器的一个角对齐,自定义单元格并在其中列出我的列表,然后点击每一行,在您的内容视图的详细信息视图中加载相应的内容。没试过,会尽快发布结果。
【讨论】: