8

如何正确对齐 a 中的文本UIPickerView?我尝试UILabel为行视图制作自定义 s,但由于某种原因,没有显示任何内容,无论是右对齐还是其他。这是我写的:

- (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示例中看到了它。

4

4 回答 4

8

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

下面的代码将使用选取器的默认字体和字体大小在中心显示选取器数据。它将提供精确的pickerdata显示行为,pickerdata的中心对齐。

这里,

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

上面示例代码的输出将如下所示

替代文字

于 2010-12-06T11:40:48.890 回答
3

由于 CGRectZero,您什么也看不到。您需要根据自己的情况设置大小。

在 UICatalog 中,如果您谈论他们如何将 CGRectZero 用于 CustomView ......好吧,如果您查看 CustomView.m,您会发现他们实际上忽略了 CGRectZero 并在 initWithFrame 中将框架设置为大小:

于 2009-03-11T03:37:11.623 回答
3

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

于 2012-12-26T02:22:58.360 回答
0

确保你:

  • 提供所需的高和宽的显式框架;
  • 适当地设置标签的显示不透明度(通过 .opaque = YES 或 NO)和背景颜色(通常分别需要 NO 和 [UIColor clearColor])。
  • 明确设置字体。
于 2009-02-22T11:05:15.807 回答