iOS 7和8似乎使定制UISegmentedControl的旧方法无法完全发挥作用。我一直在设置分频器图像以及过去常有的一切,但似乎有一些新的状态在以前的iOS版本中不存在,因此有一些奇怪的视觉效果的效果。
这是我使用
的代码// Set divider images
self.setDividerImage(UIImage(named: "SegmentedControlNoneSelected"), forLeftSegmentState: .Normal, rightSegmentState: .Normal, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlRightSelected"), forLeftSegmentState: .Normal, rightSegmentState: .Selected, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlRightSelected"), forLeftSegmentState: .Normal, rightSegmentState: .Highlighted, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlLeftSelected"), forLeftSegmentState: .Selected, rightSegmentState: .Normal, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Selected, rightSegmentState: .Highlighted, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Selected, rightSegmentState: .Selected, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Highlighted, rightSegmentState: .Selected, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlBothSelected"), forLeftSegmentState: .Highlighted, rightSegmentState: .Highlighted, barMetrics: .Default)
self.setDividerImage(UIImage(named: "SegmentedControlLeftSelected"), forLeftSegmentState: .Highlighted, rightSegmentState: .Normal, barMetrics: .Default)
// Set background images
var normalBackgroundImage = UIImage(named: "SegmentedControlNormal")
self.setBackgroundImage(normalBackgroundImage, forState: .Normal, barMetrics: .Default)
var selectedBackgroundImage = UIImage(named: "SegmentedControlSelected");
self.setBackgroundImage(selectedBackgroundImage, forState: .Selected, barMetrics: .Default)
self.setBackgroundImage(selectedBackgroundImage, forState: .Highlighted, barMetrics: .Default)
self.setBackgroundImage(selectedBackgroundImage, forState: .Disabled, barMetrics: .Default)
self.setBackgroundImage(selectedBackgroundImage, forState: .Application, barMetrics: .Default)
self.setBackgroundImage(selectedBackgroundImage, forState: .Reserved, barMetrics: .Default)
答案 0 :(得分:2)
现在应该处理一些新的状态:
//The highlighted button can be still unselected
[self.mySegmentedControl setBackgroundImage:unselectedBackgroundImage
forState:UIControlStateHighlighted
barMetrics:UIBarMetricsDefault];
//The alredy selected button is stil selected when it is highlighted
[self.mySegmentedControl setBackgroundImage:selectedBackgroundImage
forState:UIControlStateHighlighted|UIControlStateSelected
barMetrics:UIBarMetricsDefault];
//Handle when the right segment is highlighted but the left is selected
[self.mySegmentedControl setDividerImage:leftSelectedImage
forLeftSegmentState:UIControlStateSelected
rightSegmentState:UIControlStateHighlighted
barMetrics:UIBarMetricsDefault];
//Handle when the right segment is already selected and just highlighted and the right is normal
[self.mySegmentedControl setDividerImage:leftSelectedImage
forLeftSegmentState:UIControlStateHighlighted|UIControlStateSelected
rightSegmentState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
//Handle when the left segment is highlighted but the right is selected
[self.mySegmentedControl setDividerImage:rightSelectedImage
forLeftSegmentState:UIControlStateHighlighted
rightSegmentState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];
//Handle when the left segment is already selected and just highlighted and the left is normal
[self.mySegmentedControl setDividerImage:rightSelectedImage
forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateHighlighted|UIControlStateSelected
barMetrics:UIBarMetricsDefault];
看起来,设计者图像宽度现在是一件重要的事情。它对内容标签的宽度和位置有影响。所以devider图像应该尽可能缩小。