我正在尝试在UINavigationBar中创建一个标题,其作用类似于音乐应用中的标题。也就是说,它有三行,如果太长则会滚动一行。以下代码有几个问题。 1)如果一条线太长,它将突破到下一条线。因此,如果第2行太长,它会溢出到第3行,而第3行根本不会显示。此外,没有办法改变行高,这不适合UINavigationBar。
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 480, 44)];
label.backgroundColor = [UIColor clearColor];
label.numberOfLines = 3;
label.font = [UIFont boldSystemFontOfSize: 12.0f];
label.shadowColor = [UIColor colorWithWhite:0.0 alpha:0.5];
label.textAlignment = UITextAlignmentLeft;
label.textColor = [UIColor whiteColor];
NSString *songData;
songData = [[songList objectAtIndex:currentIndex] artistName];
songData = [songData stringByAppendingString:@"\n"];
songData = [songData stringByAppendingString: [[songList objectAtIndex:currentIndex] songName]];
songData = [songData stringByAppendingString:@"\n"];
songData = [songData stringByAppendingString: [[songList objectAtIndex:currentIndex] albumName]];
label.text = songData;
self.navigationItem.titleView = label;
答案 0 :(得分:4)
你试过MarqueeLabel吗?这非常好:))
MarqueeLabel是一个UILabel子类,当标签文本超出可用宽度时,会添加滚动选框效果。标签滚动方向和速度/速率也可以指定。 MarqueeLabel中提供了所有标准UILabel属性(有意义的地方),它的行为就像UILabel。
答案 1 :(得分:0)
您可以借助时间创建自己的自动收报机视图。请参考以下源代码。它将文本从一个方向移动到另一个方向。
答案 2 :(得分:0)
我正在尝试做类似的事情,而Mangesh的答案解决了问题的一半(滚动),我将尝试帮助另一半。为了适应多个标签,您可以创建一个新视图并用多个标签填充它,以防止相互运行的线条问题。有很多帖子和教程使得导航栏的自定义比你只需要向titleView添加一些东西要复杂得多。这就是我所做的:
在希望导航控制器使用的视图控制器的viewDidLoad中,初始化自定义视图控制器并将其视图设置为navigationItem的titleView:
TitleViewController * customTitleVC = [[TitleViewController alloc] initWithNibName:nil bundle:nil]; self.navigationItem.titleView = customTitleVC.view;
如果您使用Mangesh的链接,您将需要合并滚动视图并将其包含在自定义视图控制器中,并包含已链接的库。我已经确认的方法适用于iOS 4.3 - 5.1。希望能有所帮助。