UIPickerView – 使用多行的自定义视图 – 需要布局build议

我有一个UIPickerView将显示用户的项目列表。 我希望每个项目都以多行文本forms显示,每行使用不同的字体大小。 一个粗糙的模型如下所示。 这将允许呈现更多的文本,而不是在默认的UIPickerView的单行中。

小样

bdesham指向我使用pickerView:viewForRow:forComponent:reusingView在UIPickerView的委托。 这似乎是要走的路,因为它会让我为各行提供自己的自定义视图。

我的想法是创build一个UIView,其中有两个UILabel子视图,每行一个文本。 这样我可以应用不同的字体到每一行。 我试了下面,但布局似乎并没有工作。 我需要的线路是一个在另一个之上。 下面是我试图通过面具浮动第二行到底部。

#define VIEWTAG_LINE1 1 #define VIEWTAG_LINE2 2 - (UIView*)pickerView:(UIPickerView *)thePickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { UIView* v; if (view) v = view; else { v = [[[UIView alloc] init] autorelease]; UILabel* l1 = [[[UILabel alloc] init] autorelease]; l1.tag = VIEWTAG_LINE1; [v addSubview: l1]; UILabel* l2 = [[[UILabel alloc] init] autorelease]; l2.tag = VIEWTAG_LINE2; l2.autoresizingMask = UIViewAutoresizingFlexibleTopMargin; [v addSubview: l2]; } UILabel* l1 = (UILabel*)[v viewWithTag: VIEWTAG_LINE1]; l1.text = [NSString stringWithFormat: @"row %d line 1", row]; [l1 sizeToFit]; UILabel* l2 = (UILabel*)[v viewWithTag: VIEWTAG_LINE2]; l2.text = [NSString stringWithFormat: @"row %d line 2", row]; [l2 sizeToFit]; [v sizeToFit]; return v; } 

这产生下面。 有关获取两个UILabel视图的任何build议,使它们堆叠在一起产生所需的多行结果?

多线尝试

您需要设置两个标签的框架和字体。

  v = [[[UIView alloc] init] autorelease]; UILabel* l1 = [[[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 24)] autorelease]; li.font = [UIFont sytemFontOfSize:22]; // choose desired size l1.tag = VIEWTAG_LINE1; [v addSubview: l1]; UILabel* l2 = [[[UILabel alloc] initWithFrame:CGRectMake(0, 24, 320, 16)] autorelease]; l2.font = [UIFont sytemFontOfSize:14]; // choose desired size l2.tag = VIEWTAG_LINE2; [v addSubview: l2]; 

根据需要调整标签的高度。 根据需要调整l2y原点。

如果任何人有自动布局的这个问题,设置translatesAutoresizingMaskIntoConstraintsYES (这是默认值)。 我把它设置为NO ,这是造成所有问题的原因。