【问题标题】:Separately Positioning UINavigationBar Title Vertically For Each View Controller分别为每个视图控制器垂直定位 UINavigationBar 标题
【发布时间】:2014-03-08 11:23:43
【问题描述】:

尽管通过外观代理全局更改您的 UINavigationBar 标题,例如:

[[UINavigationBar 外观] setTitleVerticalPositionAdjustment:0.5 forBarMetrics:UIBarMetricsDefault];

如何为单个视图控制器定义标题的垂直高度,我希望它看起来像这样:

[self.navigationBar setTitleVerticalPositionAdjustment:0.5 forBarMetrics:UIBarMetricsDefault];

但不幸的是不起作用。我正在尝试为特定视图控制器调整标题的垂直位置,而不影响其他视图控制器的 UINavigationBar 标题位置。

【问题讨论】:

  • 您可能希望创建自己的UILabel,并通过设置UINavigationItemtitleView 属性将其作为自定义视图(或视图层次结构,取决于您的需要)。

标签: ios objective-c uinavigationbar vertical-alignment title


【解决方案1】:

您可以使用appearanceWhenContainedIn: 选择器为每个单独的 UIViewController 设置外观。它看起来像这样......

[[UINavigationBar appearanceWhenContainedIn:[ViewControllerOne class], nil] setTitleVerticalPositionAdjustment:0.3 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearanceWhenContainedIn:[ViewControllerTwo class], nil] setTitleVerticalPositionAdjustment:0.5 forBarMetrics:UIBarMetricsDefault];
[[UINavigationBar appearanceWhenContainedIn:[ViewControllerThree class], nil] setTitleVerticalPositionAdjustment:0.7 forBarMetrics:UIBarMetricsDefault];

更新:

如何通过创建StyleManager 类来使用它的示例:

@implementation StyleManager

+ (void)setApplicationStyle
{
    [[UINavigationBar appearanceWhenContainedIn:[ViewControllerOne class], nil] setTitleVerticalPositionAdjustment:0.3 forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearanceWhenContainedIn:[ViewControllerTwo class], nil] setTitleVerticalPositionAdjustment:0.5 forBarMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearanceWhenContainedIn:[ViewControllerThree class], nil] setTitleVerticalPositionAdjustment:0.7 forBarMetrics:UIBarMetricsDefault];

    // Other appearnce styling here...
}

@end

创建StyleManager 后,您可以在AppDelegate 中使用它:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [StyleManager setApplicationStyle];
}

让我知道这是否适合你。

【讨论】:

  • 如何使用 Storyboard 实现这一点,因为这就是我创建 ViewController 的方式?假设我将您的代码放入我的应用程序委托并将其配置为 [[UINavigationBar appearanceWhenContainedIn:[MainTableViewController class], nil] setTitleVerticalPositionAdjustment:-5 forBarMetrics:UIBarMetricsDefault];
  • 使用故事板并不重要。我见过的一种常见做法是创建一个StyleManagerThemeManager 类,它有一个类方法来设置所有应用程序的特定外观。我已经用一个小例子更新了我的答案。
  • 那么我应该把这些出现在哪里?在每个 ViewController 中?我宁愿不使用 tyleManager,因为我不知道如何设置它。感谢您的帮助,似乎无法在网上找到任何内容。
  • 当然。正如我在上面更新的示例中所示,设置StyleManager 实际上非常简单。您需要做的就是创建一个新的Objective-C 类,它是NSObject 的子类。将这个新类命名为 StyleManager。复制上面为+ (void)setApplicationStyle 方法显示的内容。将其粘贴到新 StyleManager 类的实现文件中。在头文件中定义方法,使其公开。然后在你的AppDelegateapplication: didFinishLaunchingWithOptions: 方法中简单地调用这个方法。
  • 好吧,所以我想办法把 [[UINavigationBar appearanceWhenContainedIn:[MainNavigationController class], nil] setTitleVerticalPositionAdjustment:-2.5 forBarMetrics:UIBarMetricsDefault];在 viewDidLoad 下的 NavigationController 文件中。就像我的应用程序的魅力一样。再次感谢您的帮助,这个问题一直把我逼疯了!
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 2014-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-07
  • 1970-01-01
相关资源
最近更新 更多