如何设置Xamarin iOS导航和状态栏颜色

时间:2014-07-14 21:57:34

标签: ios xcode xamarin.ios xamarin

我是Xamarin iOS Designer的新手,我正在尝试设置状态栏和导航控制器背景颜色,如下例所示:https://www.youtube.com/watch?v=DApI7aWGNiY

我已经在Xcode Interface Builder中打开了我的主要故事板,并按照教程中的步骤向appDelegate.m添加了代码。代码如下:

#import "AppDelegate.h"
#define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >>    16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary   *)launchOptions
{

[[UINavigationBar appearance] setBarTintColor:UIColorFromRGB(0x067AB5)];

return YES;
}

@end

上面似乎没有用 - 当我在Xamarin中保存和构建时,状态和导航栏仍然是灰色的。

我想知道为什么以及它是否与项目是在Xamarin而不是Xcode中创建的事实有关。我的.m文件位于"支持文件"文件夹与演示不同,它不包含任何自动生成的代码。在Xcode Interface Builder上似乎有更好的文档,这就是我使用它而不是新的Xamarin iOS Designer的原因。

Xamarin Studio 5.1.3和Xcode 5.1.1 有小费吗?谢谢!

**更新:通过添加可以在状态和导航栏上实现背景颜色更改     this.NavigationController.NavigationBar.BarTintColor = UIColor.Yellow; 在base.ViewDidLoad ();之后立即访问我的viewcontroller.cs。仍然想知道为什么代码添加到Xcode项目.m文件不会在Xamarin构建中呈现。

4 个答案:

答案 0 :(得分:14)

如果您想在整个iOS应用中更改导航栏颜色,请将其添加到AppDelegate FinishedLaunching方法中:

UINavigationBar.Appearance.BarTintColor = UIColor.YourColor;

您还可以通过执行以下操作来编辑导航栏的文本属性:

UINavigationBar.Appearance.SetTitleTextAttributes(new UITextAttributes { TextColor = UIColor.White });

对于状态栏,如果要将状态栏图标更改为白色而不是默认黑色,例如,为导航控制器创建一个类并覆盖UIStatusBarStyle

public override UIStatusBarStyle PreferredStatusBarStyle ()
{
     return UIStatusBarStyle.LightContent;
}

这适用于您的NavigationController及其任何子控制器。

答案 1 :(得分:7)

我终于在Xamarin Forms中使用了这篇文章,所以请参阅http://morganskinner.blogspot.co.uk/2015/01/xamarin-forms-light-status-bar-for-ios.html以获取完整的详细信息。我还有一个关于为导航栏设置背景图像的后续帖子,并让它也适用于Landscape - 请参阅http://morganskinner.blogspot.co.uk/2015/01/xamarin-formsusing-background-images-on.html。希望这有助于其他人!

答案 2 :(得分:0)

以下行代码可能对您有所帮助。

public override void ViewDidAppear(bool animated){

    NavigationController.NavigationBar.BackgroundColor = UIColor.Yellow;

} 

答案 3 :(得分:-2)

    if([[[UIDevice currentDevice] systemVersion] floatValue] < 7.0)
    {
        [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics:UIBarMetricsDefault];
        [[UINavigationBar appearance] setTitleTextAttributes:
         @{
           UITextAttributeTextColor: [UIColor whiteColor],UITextAttributeTextShadowColor: [UIColor clearColor],UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0.0f, 1.0f)],UITextAttributeFont: [UIFont fontWithName:@"ArialMT" size:18.0f]
           }];
        CGFloat verticalOffset = 0;
        [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:verticalOffset forBarMetrics:UIBarMetricsDefault];
    }
    else
    {
        [[UINavigationBar appearance] setBarTintColor:[UIColor whiteColor]];

        // Uncomment to change the color of back button
        [[UINavigationBar appearance] setTintColor:[UIColor whiteColor]];

        // Uncomment to assign a custom backgroung image
        [[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics:UIBarMetricsDefault];

        // Uncomment to change the back indicator image

        [[UINavigationBar appearance] setBackIndicatorImage:[UIImage imageNamed:@""]];
        [[UINavigationBar appearance] setBackIndicatorTransitionMaskImage:[UIImage imageNamed:@""]];

        // Uncomment to change the font style of the title

        NSShadow *shadow = [[NSShadow alloc] init];
        shadow.shadowColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.8];
        shadow.shadowOffset = CGSizeMake(0, 1);

        [[UINavigationBar appearance] setTitleTextAttributes: [NSDictionary dictionaryWithObjectsAndKeys:[UIColor colorWithRed:245.0/255.0 green:245.0/255.0 blue:245.0/255.0 alpha:1.0], NSForegroundColorAttributeName,shadow, NSShadowAttributeName,[UIFont fontWithName:@"ArialMT" size:18.0], NSFontAttributeName, nil]];

        CGFloat verticalOffset = 0;
        [[UINavigationBar appearance] setTitleVerticalPositionAdjustment:verticalOffset forBarMetrics:UIBarMetricsDefault];
    }