为什么UINavigationBar背景图像重复?

图像尺寸为640 X 44,适用于iPad Portrait。 由于某种原因,它显示为图案图像而不是拉伸。

在此处输入图像描述

iOS 6

原因是ipad的分辨率为1024×768。因此,图像的宽度应为768

尝试以下方法来拉伸图像:

// load the background image navbar.png UIImage *imageNavBar = [UIImage imageNamed:@"navbar"]; // set the image as stretchable and set into navbar globally imageNavBar = [imageNavBar stretchableImageWithLeftCapWidth:0 topCapHeight:0]; [[UINavigationBar appearance] setBackgroundImage:imageNavBar forBarMetrics:UIBarMetricsDefault]; 

一种方法是根据导航栏的宽度调整图像大小。

 let navBackgroundImage:UIImage! = UIImage(named: "top_header_iPhone") let navimg = navBackgroundImage.resizeImageWith(newSize: CGSize(width: UIScreen.main.bounds.size.width, height: navBackgroundImage.size.height)) UINavigationBar .appearance().setBackgroundImage(navimg, for:.default) UINavigationBar.appearance().titleTextAttributes = [ NSFontAttributeName: UIFont(name: "FightingSpiritturbo", size: 23)!] 

并且调整图像大小的function是:

 extension UIImage{ func resizeImageWith(newSize: CGSize) -> UIImage { let horizontalRatio = newSize.width / size.width let verticalRatio = newSize.height / size.height let ratio = max(horizontalRatio, verticalRatio) let newSize = CGSize(width: size.width * ratio, height: size.height * ratio) UIGraphicsBeginImageContextWithOptions(newSize, true, 0) draw(in: CGRect(origin: CGPoint(x: 0, y: 0), size: newSize)) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! } }