UIPickerView与Multiline UILabel

kou*_*shi 7 iphone objective-c uipickerview uikit uilabel

我目前正在开发一个程序,它可以从我的Core Data设置中动态填充选择器视图.我有一切都在数据方面工作,但我现在遇到的问题是在我的标签上格式化.

选择器在动作表中显示它自己的工具栏,工具栏的右侧有一个按钮.它的初始状态是可见2个刻度盘.按下按钮时,它会变为3个拨盘.

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *pickerLabel = (UILabel *)view;

    CGSize limitSize = CGSizeMake(100.0f, 45.0f);
    CGSize textSize;
    CGRect labelRect;
    NSString *title = @"";


    switch (numberOfComponents){
        case 2:
        {
            ...gets strings from fetched data (varying length from 4 to 20+)
                    title = someString
        }
        case 3:
        {
            ...same as above but for the second set of data.
                    title = someString
        }           
    }


    textSize = [title sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:limitSize lineBreakMode:UILineBreakModeWordWrap];
    labelRect = CGRectMake(0, 0, textSize.width, textSize.height);
    NSLog(@"length:%i title:%@",[title length],title);
    NSLog(@"h:%f w:%f",textSize.height,textSize.width);
    if (pickerLabel == nil)
    {
        pickerLabel = [[[UILabel alloc] initWithFrame:labelRect] autorelease];
        [pickerLabel setFont:[UIFont systemFontOfSize:14]];
        [pickerLabel setBackgroundColor:[UIColor clearColor]];
        [pickerLabel setLineBreakMode:UILineBreakModeWordWrap];
        [pickerLabel setTextAlignment:UITextAlignmentCenter];
        [pickerLabel setNumberOfLines:2];
    }

    [pickerLabel setText:title];    

    return pickerLabel;
}
Run Code Online (Sandbox Code Playgroud)

我手动将行高设置为32.0f.我得到了非常奇怪的结果,第二个组件中的一些标签工作得很好.但其他人根本没有包装,有些只是显示为空白.

即:布鲁塞尔豆芽包好(正确的组件).但牛奶和奶油不显示(只有牛奶可见)蔬菜根本没有出现.我的代码在哪里出错?

kou*_*shi 2

我设法让它表现良好。我通过删除更改了最后一部分


textSize = [title sizeWithFont:[UIFont systemFontOfSize:14] constrainedToSize:limitSize lineBreakMode:UILineBreakModeWordWrap];
Run Code Online (Sandbox Code Playgroud)

我手动设置框架


labelRect = CGRectMake(0,0,100.0,36.0);
Run Code Online (Sandbox Code Playgroud)

不知道为什么这有效,而动态大小却不起作用。