在UIPickerView中对齐文本


8

如何正确对齐UIPickerView中的文本?我试图为行视图定制UILabel,但由于某种原因,没有任何内容显示,右对齐或其他方式。这是我写的:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectZero]; 
    [label setText:[NSString stringWithFormat:@"row %d", row]]; 
    [label setTextAlignment:UITextAlignmentRight]; 
    return [label autorelease]; 
} 

如果你想知道,我用CGRectZero因为我看到它在UICatalog例子。

3

由于CGRectZero你没有看到任何东西。你需要在你的情况下设置一个大小。

在UICatalog中,如果您谈论他们如何将CGRectZero用于CustomView ...以及如果您查看CustomView.m,您将看到它们实际上忽略了CGRectZero并在initWithFrame中将框架设置为一个大小:


0

确保您:

  • 提供一个明确的框架,该框架为高和宽的需求;
  • 适当设置标签的显示不透明度(通过.opaque = YES或NO)和背景颜色(通常分别需要NO和[UIColor clearColor])。
  • 显式设置字体。

8

我在picker和两个数组中使用了两个组件来设置特定组件中行的标题。

下面的代码将在picker数据中心显示picker的默认字体和字体大小。 它将给picker数据的中心对齐提供确切的picker数据显示行为。

这里,

NSArray *component1Array=[NSArray arrayWithObjects:@"0 lbs",@"1 lbs",@"2 lbs",@"3 lbs",@"4 lbs",@"5 lbs",nil]; 

NSArray *component2Array=[NSArray arrayWithObjects:@"0.00 oz",@"0.25 oz",@"0.50 oz",@"0.75 oz",@"1.00 oz",nil]; 

    - (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
     { 
      //I have taken two components thats why I have set frame of my "label" accordingly. you can set the frame of the label depends on number of components you have... 

      UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 145, 45)]; 

      //For right alignment of text,You can set the UITextAlignmentRight of the label. 
      //No need to set alignment to UITextAlignmentLeft because it is defaulted to picker data display behavior. 

      [label setTextAlignment:UITextAlignmentCenter]; 
      label.opaque=NO; 
      label.backgroundColor=[UIColor clearColor]; 
      label.textColor = [UIColor blackColor]; 
      UIFont *font = [UIFont boldSystemFontOfSize:20]; 
      label.font = font; 
      if(component == 0) 
      { 
       [label setText:[NSString stringWithFormat:@"%@",[component1Array objectAtIndex:row]]]; 
      } 
      else if(component == 1) 
      { 
       [label setText:[NSString stringWithFormat:@"%@", [component2Array objectAtIndex:row]]]; 
      } 
      return [label autorelease]; 
     } 

你应该低于一提UIPickerView委托的方法,如果您使用上述方法评论...

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 

以上示例代码的输出将类似于下面

alt text


3

在iOS 6中,您现在可以返回一个NSAttributedString,它可以包含文本对齐属性。我在这里发布了另一个相关问题的短片段:https://stackoverflow.com/a/14035356/928963