我有一个UIPickerView,它会显示用户的项目列表。我希望每个项目都显示为多行文本,每行使用不同的字体大小。粗略的模型如下所示。这将允许显示比默认UIPickerView的单行更多的文本。
bdesham指出我要使用pickerView:viewForRow:forComponent:在UIPickerView的委托中重用View。这似乎是要走的路,因为它让我为各行提供自己的自定义视图。
我的想法是创建一个UIView,它有2个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视图的建议,以便它们相互叠加,产生所需的多行结果?
答案 0 :(得分:3)
您需要设置两个标签的框架和字体。
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];
根据需要调整标签的高度。根据需要调整y
的{{1}}来源。
答案 1 :(得分:1)
如果有人在自动布局中遇到此问题,请将translatesAutoresizingMaskIntoConstraints
设置为YES
(这是默认值)。我将它设置为NO
,这导致了所有问题。