我设法将导航栏更改为自定义拉伸图像并将后退按钮变成不同的颜色。我在导航栏中设置级别数和硬币总数时遇到问题。
我认为必须有任何更简单的方法,然后再搞乱 HUD 的进度等等——这就是我在研究中看到的所有内容。
我正在尝试实现与下面附加的类似的外观 - 元素明智而不是图形。
感谢您提前提供任何帮助。
我设法将导航栏更改为自定义拉伸图像并将后退按钮变成不同的颜色。我在导航栏中设置级别数和硬币总数时遇到问题。
我认为必须有任何更简单的方法,然后再搞乱 HUD 的进度等等——这就是我在研究中看到的所有内容。
我正在尝试实现与下面附加的类似的外观 - 元素明智而不是图形。
感谢您提前提供任何帮助。
两种解决方案:
使用您自己的元素将整个导航栏变成自定义视图,然后根据需要更新它们。使用 的titleView
属性执行此操作UINavigationItem
。
将leftBarButtonItem
、titleView
和rightBarButtonItem
与您自己的自定义视图一起使用。
我更喜欢第二种方法,因为它更具可扩展性(视觉上)——即您的视图控制器将在横向模式、iPad 或奇怪大小的弹出框等中正确布局。左侧项目将与左侧对齐,右边和中间一个在中间。但是,它有点复杂,因为左右项需要是 type UIBarButtonItem
。我们可以这样解决:
// Set up the red star thing in the middle with a number 6 on it
MyRedStarView* redStarView = [MyRedStarView redStarViewWithValue:6];
self.navigationItem.titleView = redStarView;
// Set up the 'word' button on the left
MyWordButton* wordButton = [MyWordButton defaultWordButton];
UIView* buttonHolderView = [[UIView alloc] initWithFrame:CGRectZero];
buttonHolderView.backgroundColor = [UIColor clearColor];
[buttonHolderView addSubview:wordButton];
buttonHolderView.frame = wordButton.frame;
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:buttonHolderView];
// Set up the coin indicator on the right
MyCoinView* coinView = [MyCoinView coinViewWithValue:515];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:coinView];
请注意我是如何将按钮(在 leftBarButtonItem 上)包装在持有人视图中的 - 只有当您想在按钮上进行某种视图转换时才需要这样做。例如,如果它在不同的上下文中发生变化,并且您希望通过从持有者视图中移除按钮并添加不同的按钮(带有视图转换)来为转换设置动画。在右栏按钮项上,我没有这样做,只是为了展示不同的方法。
当然,我使用了一些虚假的视图类型来演示——您实际上拥有对这些的自己的引用,以便您可以设置属性值并更新数字的显示。
假设您已经有导航视图,请尝试以下代码
- (void)viewDidLoad
{
// Custom Navigation Bar
// -----------------------------------
UIView *navigationCustomTitle = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 200.0, 20.0)];
navigationCustomTitle.backgroundColor = [UIColor clearColor];
UIImageView *icon = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"icon.png"]];
UILabel *titleCustomLabel = [[UILabel alloc] initWithFrame:CGRectMake(30.0, 0.0, 260.0, 20.0)];
titleCustomLabel.text = @"A nice title";
titleCustomLabel.textColor = [UIColor whiteColor];
titleCustomLabel.backgroundColor = [UIColor clearColor];
titleCustomLabel.font = [UIFont fontWithName:@"HelveticaNeue-CondensedBold" size:(16.0)];
[navigationCustomTitle addSubview:titleCustomLabel];
[navigationCustomTitle addSubview:icon];
self.navigationItem.titleView = navigationCustomTitle;
}