iOS - 在导航栏标题中添加图像和文本

2023-11-24

我想创建一个类似于所附图像中的导航栏。

导航栏的标题将是图像和文本的组合。

  1. 是否应该按照最佳实践来完成此操作?

  2. 如何做呢?

Screen shot of mockup of nav bar with image and text


As 这个答案显示,最简单的解决方案是将文本添加到图像中,然后将该图像添加到导航栏,如下所示:

var image = UIImage(named: "logo.png")
self.navigationItem.titleView = UIImageView(image: image)

但是,如果您必须分别添加文本和图像(例如,在本地化的情况下),您可以将导航栏的标题视图设置为包含图像和文本,方法是将它们添加到UIView并设置navigationItem的标题视图UIView例如(假设导航栏是导航控制器的一部分):

// Only execute the code if there's a navigation controller 
if self.navigationController == nil {
    return
}

// Create a navView to add to the navigation bar
let navView = UIView()

// Create the label
let label = UILabel()
label.text = "Text"
label.sizeToFit()
label.center = navView.center
label.textAlignment = NSTextAlignment.Center

// Create the image view
let image = UIImageView()
image.image = UIImage(named: "Image.png")
// To maintain the image's aspect ratio:
let imageAspect = image.image!.size.width/image.image!.size.height
// Setting the image frame so that it's immediately before the text:
image.frame = CGRect(x: label.frame.origin.x-label.frame.size.height*imageAspect, y: label.frame.origin.y, width: label.frame.size.height*imageAspect, height: label.frame.size.height)
image.contentMode = UIViewContentMode.ScaleAspectFit

// Add both the label and image view to the navView
navView.addSubview(label)
navView.addSubview(image)

// Set the navigation bar's navigation item's titleView to the navView
self.navigationItem.titleView = navView

// Set the navView's frame to fit within the titleView
navView.sizeToFit()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS - 在导航栏标题中添加图像和文本 的相关文章

随机推荐

  • Bitbucket:显示标记为秘密的变量的值

    对于我的一个存储库 我需要查看我为部署的安全属性设置的值 按中所述创建https support atlassian com bitbucket cloud docs variables and secrets Secured variab
  • .Net Core 依赖注入 IdbConnection

    我有一个 NET MVC 应用程序 它使用 autofac 进行依赖注入 当应用程序启动时 以下代码注册 IDbConnection var connectionString ConfigurationManager ConnectionS
  • 在真实设备上通过 USB 连接 localhost api 与 Android Studio 时出现超时错误

    我在 Window 8 1 上使用 Android Studio 版本 3 安装了 XAMPP 以在本地主机上托管 php api 我正在尝试从 Android Studio 访问 localhost api 在主机名中 我使用了 IPv4
  • Docker 运行失败,守护程序发出错误响应

    我只需运行以下命令 docker run d p 80 80 name webserver nginx 拉取所有图像后返回此错误 docker 来自守护程序的错误响应 驱动程序外部编程失败 端点网络服务器上的连接 ac5719bc0e95e
  • 如何在 SwiftUI 中的 foreach 循环中设置切换状态

    当我尝试在字典的值循环内设置显示切换时 我从错误消息中得到的帮助很少 如果我取消注释下面的 3 行注释代码 并尝试为循环中的每个属性添加切换 则会收到以下错误 无法将类型 HStack Text ConditionalContent gt
  • 部署期间 Azure 中的 Service Fabric 错误

    将集群部署到 Azure 时遇到问题 一切都在本地运行 但是当部署到 Azure 时 我在尝试调用其中一项服务时收到错误 在 Azure 中 服务结构是6 1 480 9494 并且无法升级 但我的本地版本是6 2 262 94946天前发
  • 如何去掉小数点后的零

    我正在尝试在小数点后修剪零 如下所示 但它没有给出所需的结果 trig currentVal doubleValue trig trig 100 NSNumberFormatter formatter NSNumberFormatter a
  • 使用多个 CTE

    无法弄清楚如何使用多个 CTE 这失败了 with cteOne as select 1 as col cteTwo as select 2 as col select yesA where exists select from cteOn
  • 将数据从 Textbox 插入到 Postgresql

    我刚刚学习如何连接 C 和 PostgresQL 我想将 tb1 Textbox 和 tb2 中的数据插入数据库 但我不知道如何编码 我以前的代码是从数据库中选择 这是我的代码 private void button1 Click obje
  • 如何取消 URL 会话请求

    我使用将图像转换为 base64 并将图像作为参数发送到 API 中 将多个图像上传到服务器 但是 当我们一次又一次调用 api 时 如何停止单击按钮时的 api 调用 我正在使用下面的代码来调用 API 提前致谢 let urlPath
  • Windows 上的 QtCreator 使用 CodeSourcery 工具链为 Linux ARM 进行交叉编译

    我在 Windows 7 计算机上安装了 Qt Creator 我的目标是 OMAP3 嵌入式 Linux 板 我下载了目标工具链 Sourcery G Lite for Windows 并安装了 MinGW http www mingw
  • 如何将 npm 与 node.exe 一起使用?

    我已经从 Windows 下载了 Nodejs 的二进制文件 exe 主页 我该如何安装和使用npm 节点包管理器 当前的 Windows 安装程序来自节点js org从 v0 6 11 2012 02 20 开始 NPM 将与 NodeJ
  • C 中混合使用“switch”和“while”

    我最近读过这一页关于奇怪的 C 片段代码 其中大多数是可以理解的 但我无法理解这一点 switch c 3 while c 4 gt 0 foo case 3 foo case 2 foo case 1 foo case 0 谁能帮我看看这
  • 如何在 Oracle 10gR2 和 JPA 中做到不区分大小写和不区分重音?

    在 J2EE 项目中 使用 JPA 如何强制类似查询不区分大小写和重音 我知道更改会话变量 NLS COMP 和 NLS SORT 但我想知道是否还有另一个技巧可以在查询本身中执行此操作 而不更改会话变量 使用 JPA 如何强制类似查询不区
  • 无法对基本类型 double 调用compareTo(double)

    线路return array index1 compareTo array index2 提供了一个错误 无法对基本类型 double 调用compareTo double 如何解决这个问题 This function implements
  • 如何判断DLL是COM还是.NET?

    我有一个更新程序 从服务器提取的文件在一个目录中混合了 vb6 dll 和 net DLL 如何判断一个dll是否是COM dll 所以我可以调用regsvr32从更新程序到它 我想一种方法是尝试使用以下命令加载文件System Refle
  • KornShell 中的正则表达式

    我试图检查一个变量是否恰好是两个数字 但我似乎无法弄清楚 如何在 KornShell ksh 中检查正则表达式 regex 我努力了 if month 0 9 2 if month 0 9 2 我无法找到任何有关它的文档 有什么见解吗 ca
  • 路由器后面的android套接字编程

    我有疑问或问题 我正在尝试在两部 Android 手机之间建立 p2p 连接 我将每部电话连接到我的服务器 并获取它们的私有 192 168 1 1 和公共 76 123 288 22 IP 以及它们连接到我的服务器的端口 当电话连接到服务
  • 使用 IdentityServer4 从多个 API 创建用户

    所以我已经为这个问题苦恼了一段时间了 我们有一个网络应用程序正在使用身份服务器4 and AspNet身份验证和注册用户 这是按预期工作的 此外 我们还有另一个 API 在同一解决方案中 能够使用 IdentityServer4 对访问 A
  • iOS - 在导航栏标题中添加图像和文本

    我想创建一个类似于所附图像中的导航栏 导航栏的标题将是图像和文本的组合 是否应该按照最佳实践来完成此操作 如何做呢 As 这个答案显示 最简单的解决方案是将文本添加到图像中 然后将该图像添加到导航栏 如下所示 var image UIIma