如何在 UIPickerView 中自动换行

Posted

技术标签:

【中文标题】如何在 UIPickerView 中自动换行【英文标题】:How to make Word wrap in UIPickerView 【发布时间】:2015-01-18 07:08:05 【问题描述】:

我有一个 UIPickerView,我想让文本自动换行。

这是我的代码:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view

    if (component == 0) 
    UILabel *lView = (UILabel *)view;

    if (!tView) 
        tView = [[UILabel alloc] init];
        [tView setFont:[UIFont systemFontOfSize:15]];
        tView.numberOfLines = [categorie count];
    
    tView.text = [categorie objectAtIndex:row];
    return tView;
    
    else 
        UILabel *lView = (UILabel *)view;

        if (!sView) 
            sView = [[UILabel alloc] init];
            [sView setFont:[UIFont systemFontOfSize:15]];
            sView.numberOfLines = [subCat count];
        
        sView.text = [subCat objectAtIndex:row];
        return sView;
    

我尝试设置 sView.numberOfLines = 0; (这就是您通常将 UILabel 设置为自动换行或超过 1 行的方式)但这不起作用。

【问题讨论】:

偏离主题,但在主题上:github.com/NYTimes/objective-c-style-guide#naming 请提供更多描述性变量:D 所有变量都只是数组 并不是这段代码 sn-p 难以理解,而是你应该考虑我所建议的作为编写代码的最佳实践。从长远来看,这肯定有助于习惯这样的事情 【参考方案1】:

让我解释一下您的代码中发生了什么,例如让我们想象一下,subCat 数组包含两个字符串对象:“one”、“two”

// You try to reuse label for picker
UILabel *sView = (UILabel *)view;
if (!sView) 
    // if this view doesn't exists, you create new label
    sView = [[UILabel alloc] init];
    [sView setFont:[UIFont systemFontOfSize:15]];
    // And once set numberOfLines to value 2 in our case
    sView.numberOfLines = [subCat count];

// And here you set text to "one" or "two" value from array
// I don't understand where you set multiline text value?
sView.text = [subCat objectAtIndex:row];
return sView;

你需要这样的东西:

sView.text = [subCat componentsJoinedByString:@"\n"];

【讨论】:

我 di componentsJoinedByString:@"\n",它所做的就是将第一个复制到所有其他的。例如,如果第一个是“one”,则所有其他行都显示“one” 你在- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component委托函数中返回什么值?也许你返回的高度不够,标签那么小,所以不能显示超过 1 个字符串? 什么意思?我将delegate设置为self,并没有设置高度。 UIPickerViewDelegate 有可选函数rowHeightForComponent,您可以在其中返回每个选取器单元格的高度

以上是关于如何在 UIPickerView 中自动换行的主要内容,如果未能解决你的问题,请参考以下文章

在 uitableviewcell 中自定义 uipickerview

UIPickerView 中的文本换行

将 CoreData 对象的字符串属性加载到 UIPickerView

用UIPickerView来显示省和市

记一次 UIPickerView 无法滚动的问题。

PhoneGap:iOS 7 中的 UIPickerView 不会像在 iOS 6 中那样自动调整字体大小。关于如何在 iOS 7 中实现的任何解决方案?