iOS 7 UIPickerView未选定行曲率修改多个组件

我正在尝试修改UIPickerView的曲率看起来像iOS 7的定时器。

这是我有什么: 在这里输入图像说明

请注意2和4与所选行中的3是如何显着偏移的。 有没有办法让它更“平”,一个在iOS7的定时器,其中2和4是直接上面和下面的3?

这是我迄今为止所尝试的:

  1. - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component

  2. 使用自定义的UIView和一个自定义的UILabel偏移

似乎没有工作。

任何帮助?

该偏移是由于select器指示器位于其上的独立的升起平面造成的。 这实际上是一个相当准确的渲染(嵌套,印刷,清晰的圆柱体)。 苹果在“时钟”应用程序中所做的是正确alignment选取器标签。 这确保了号码和其单位标签之间的间隔保持不变。 你可以做同样的事情。

首先,在您想要实现的选取器视图委托中,使用-pickerView:attributedTitleForRow: forComponent:代替-pickerView:titleForRow:forComponent:。 (看起来你已经完成了白色的文字颜色。)你将使用NSParagraphStylestring属性。 您将需要在段落样式上设置两个属性:alignment和尾部缩进。 alignment应该设置为NSTextRightAlignment 。 尾部alignment将取决于您希望标签距组件右边的距离。 如果您有多个组件,则需要使用-pickerView:widthForComponent:来设置组件的宽度。 如果要将曲率保持在最小值,请将组件宽度设置为大约缩短尾部缩进量的两倍。

注意:如果您的select器只有两个部件,每个部件的宽度必须小于select器的宽度的1/3。

这是一个代码示例:

 - (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component { NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setAlignment:NSTextAlignmentRight]; [paragraphStyle setTailIndent:150]; return [[NSAttributedString alloc] initWithString:@"42" attributes:@{NSParagraphStyleAttributeName:paragraphStyle}]; } - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { return 300; } 

而是2个组件,尝试制作4个组件,类似于这个片段:

 - (void)viewDidLoad { [super viewDidLoad]; self.model = @[@"1",@"2",@"3",@"4",@"5",@"6"]; } - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { return 4; } - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { NSInteger numberOfRows; if(component == 0 || component == 2) { numberOfRows = [self.model count]; } else { numberOfRows = 1; } return numberOfRows; } - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { NSString* title; switch (component) { case 0: case 2: title = self.model[row]; break; case 1: title = @"ft"; break; case 3: title = @"in"; break; default: break; } return title; } 

我通过使用固定布局问题

 - (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component{ switch (component){ case 0: return 106.0f; case 1: return 50.0f; case 2: return 106.0f; } return 0; } 

https://stackoverflow.com/a/19743682/809671

当UIPickerView组件的大小大于106时,该链接表示布局中断。所以,我使得我的部分宽度为106。

我通过使UIPicker有3个组件来增加中间的空间。

我注意到,如果组件的数量== 1,那么就没有这样的缩放+偏移效果。

我实施的解决方法是在屏幕上显示2个UIPickerView,并相应地实现委托和数据源function。