Swift中如何将图片设置为大尺寸导航栏的标题?
嘿,我懂你想把导航栏标题图片改成大尺寸的需求!你之前的代码是针对常规小尺寸导航栏写的,要实现大尺寸效果,得调整几个关键地方,我给你两种实用的方案,按需选择:
实现大尺寸导航栏标题图片的方案
方法一:让标题图超出导航栏(无需修改导航栏高度)
这种方式适合想要标题图更突出的场景,不用改导航栏本身的高度,让图片部分超出导航栏范围:
func setUpLargeNavigationBarTitleImage() { guard let navController = navigationController else { return } // 加载目标图片,记得替换成你的图片名 guard let image = UIImage(named: "2-1 H Logo Home.png") else { print("标题图片加载失败,请检查图片名是否正确") return } let imageView = UIImageView(image: image) // 设置图片缩放模式,保持比例完整显示选.scaleAspectFit,填满视图选.scaleAspectFill imageView.contentMode = .scaleAspectFit // 自定义图片尺寸,这里设置宽度和导航栏一致,高度是导航栏的2倍,你可以按需修改 let desiredWidth = navController.navigationBar.frame.width let desiredHeight = navController.navigationBar.frame.height * 2.0 imageView.frame = CGRect(x: 0, y: 0, width: desiredWidth, height: desiredHeight) // 将ImageView设为导航栏标题视图 navController.navigationBar.titleView = imageView // 可选:调整标题视图的居中位置,确保显示更协调 navController.navigationBar.titleView?.center = navController.navigationBar.center }
方法二:调整导航栏高度以完全容纳大标题图
如果你希望标题图完全在导航栏内部显示,那需要先调整导航栏的高度,再适配图片尺寸:
func setUpLargeNavigationBarWithTitleImage() { guard let navController = navigationController else { return } // 1. 自定义导航栏高度,这里设为80,你可以根据图片大小调整 let newNavHeight: CGFloat = 80 var navFrame = navController.navigationBar.frame navFrame.size.height = newNavHeight navController.navigationBar.frame = navFrame // 2. 加载并设置标题图片 guard let image = UIImage(named: "2-1 H Logo Home.png") else { print("标题图片加载失败,请检查图片名是否正确") return } let imageView = UIImageView(image: image) imageView.contentMode = .scaleAspectFit // 给图片留一点内边距,避免贴满导航栏 imageView.frame = CGRect(x: 0, y: 0, width: navFrame.width, height: newNavHeight - 10) navController.navigationBar.titleView = imageView }
几个重要提示
- 图片加载容错:一定要加
guard let判断图片是否加载成功,不然图片不存在时会直接崩溃 - 缩放模式选择:
.scaleAspectFit会完整显示图片并保持比例,.scaleAspectFill会填满视图但可能裁剪图片,根据你的设计需求选就好 - iOS版本兼容性:如果是iOS 13及以上,也可以用
UINavigationBarAppearance来更优雅地设置导航栏样式,上面的方法是基础的frame调整,适配性也很强
内容的提问来源于stack exchange,提问作者Agung
相关产品推荐
相关产品推荐

