Set Done Button Colour on SFSafariViewController

2019-06-24 01:53发布

问题:

I am using the SFSafariViewController to access a website called from a UITableViewController. Because my app has a very light feel attached to it, I have added the following line of code in the AppDelegate:

self.window.tintColor = [UIColor whiteColor];

When running the SFSafariViewController, I get the following:

Is there anyway I can change the colour of the Done button to Blue (as per default)?

I've tried the following when calling the SFSafariViewController but to no effect:

        [self presentViewController:safariVC animated:YES completion:^{
            safariVC.navigationController.navigationItem.rightBarButtonItem.tintColor = [UIColor blueColor];


        [self presentViewController:safariVC animated:YES completion:^{
            safariVC.navigationController.navigationBar.tintColor = [UIColor blueColor];
        }];

Neither of those work.

I could of course leave the app as default and take out the white setting from the AppDelegate, but I want this approach within the app because Blue just stands out too much with custom themes.

Any guidance on this would be really appreciated.

回答1:

You can change bar colours globally using appearance proxy:

try

[[UINavigationBar appearance] setTintColor:[UIColor blueColor]];
[[UIBarButtonItem appearance] setTintColor:[UIColor blueColor]];

else try

  [self presentViewController:safariVC animated:YES completion:^{

         [safariVC.navigationBar setTintColor:[UIColor blueColor]];
    }];

else try

in AppDelegate.m in the function:

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

I've entered the following code:

//SFSafariViewController
[[UINavigationBar appearanceWhenContainedIn:[SFSafariViewController class], nil] setBarTintColor:[UIColor blueColor]];
[[UINavigationBar appearanceWhenContainedIn:[SFSafariViewController class], nil] setTintColor:[UIColor blueColor]];

or add in your ViewDidLoad

[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]]; 

Swift

UINavigationBar.appearance().tintColor = UIColor.blueColor()
UIBarButtonItem.appearance().tintColor = UIColor.blueColor()

else try this

self.presentViewController(safariVC, animated: true, completion: {() -> Void in
safariVC.navigationBar.tintColor = UIColor.blueColor()
})

or do like

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool {

     UINavigationBar.appearanceWhenContainedIn(SFSafariViewController.self, nil).barTintColor = UIColor.blueColor()
UINavigationBar.appearanceWhenContainedIn(SFSafariViewController.self, nil).tintColor = UIColor.blueColor()
}

or finally try this

  self.navigationController.navigationBar.tintColor = UIColor.whiteColor()


回答2:

Try setPreferredControlTintColor to set tint color of Done button