SwiftUI中SafeArea的管理与使用(ignoresSafeArea, safeAreaPadding, safeAreaInset)

SafeArea是指不与视图控制器提供的导航栏、选项卡栏、工具栏或其他视图重叠的内容空间。

UIKit中,开发人员需要使用safeAreaInsetssafeAreaLayoutGuide来确保视图被放置在界面的可见部分。

SwiftUI彻底简化了上述过程,除非开发者明确要求视图突破安全区域的限制,否则SwiftUI将尽力确保开发者创建的视图布局在安全区域内。SwiftUI还为开发者提供了一些控制安全区域的方法和工具。

Safe area

安全区域帮助我们将视线保持在屏幕可见部分之内。例如,我们可以使用安全区域轻松地将视图放置在导航条和home指示器之间。

在这里插入图片描述

默认情况下,SwiftUI只在安全区域内放置视图,比如下面这段代码。

struct SafeAreaDemo: View {var body: some View {NavigationView {ZStack {LinearGradient(colors: [.red, .yellow],startPoint: .topLeading,endPoint: .bottomTrailing)}.navigationTitle("Hello World")}}
}

在这里插入图片描述

ignoresSafeArea修饰符

我们可以通过ignoresSafeArea修饰符改变系统这一行为。

struct SafeAreaDemo: View {var body: some View {NavigationView {ZStack {LinearGradient(colors: [.red, .yellow],startPoint: .topLeading,endPoint: .bottomTrailing)}.ignoresSafeArea().navigationTitle("Hello World")}}
}

在这里插入图片描述

ignoresSafeArea视图修饰符通过忽略安全区域来扩展视图并填充空间。ignoresSafeArea视图修饰符有两个参数,允许我们设置被忽略的安全区域的方向和区域。

    /// - Parameters:///   - regions: The regions to expand the view's safe area into. The///     modifier expands into all safe area region types by default.///   - edges: The set of edges to expand. Any edges that you///     don't include in this set remain unchanged. The set includes all///     edges by default.////// - Returns: A view with an expanded safe area.@inlinable public func ignoresSafeArea(_ regions: SafeAreaRegions = .all, edges: Edge.Set = .all) -> some View
  • regions参数允许我们设置被忽略的安全区域类型。SafeAreaRegions的可选类型主要有下面三种:
// 所有类型
static let all: SafeAreaRegions
// 在用户界面内由设备和容器定义的安全区域,包括顶部和底部条等元素。
static let container: SafeAreaRegions
// 安全区域匹配当前显示在视图内容上的任何软件键盘的范围。
static let keyboard: SafeAreaRegions
  • edges参数允许我们忽略一个方向或一组方向上的安全区域。例如,它可以是top, leading, bottom, trailing, horizontal, vertical, all或前面选项的任意组合。

safeAreaPadding修饰符

SwiftUI提供的safeAreaPadding修饰符允许我们将安全区的一个边或者多个边设置指定的边距,safeAreaPadding修饰符只在iOS 17或者tvOS 17及以后可以使用。

struct SafeAreaDemo: View {var body: some View {NavigationView {ZStack {LinearGradient(colors: [.red, .yellow],startPoint: .topLeading,endPoint: .bottomTrailing)}.safeAreaPadding(.all, 100) // 安全区四边缩进100..navigationTitle("Hello World")}}
}

在这里插入图片描述

safeAreaInset修饰符

safeAreaInset视图修饰符是管理视图安全区域的另一种方法。safeAreaInset视图修饰符允许通过在视图的原始安全区域内放置另一个视图来移动或改变视图的安全区域。

func safeAreaInset<V>(edge: VerticalEdge,alignment: HorizontalAlignment = .center,spacing: CGFloat? = nil,@ViewBuilder content: () -> V
) -> some View where V : View
struct SafeAreaDemo: View {var body: some View {NavigationView {ZStack {LinearGradient(colors: [.red, .yellow],startPoint: .topLeading,endPoint: .bottomTrailing)}.navigationTitle("Hello World").safeAreaInset(edge: .bottom, alignment: .center, spacing: 0) {Text("Tap").frame(width: 50).background(Color.red)}.safeAreaInset(edge: .top, alignment: .center, spacing: 0) {Text("Tap").frame(maxWidth: .infinity).background(Color.blue)}}}
}

在这里插入图片描述

safeAreaInset修饰符有一堆参数:

  • edge: 决定视图要插在垂直边缘的哪个边上,高度不够的时候会根据内容视图的高度决定。
  • alignment:决定视图在水平方向的位置。
  • spacing:两个视图之间放置的额外距离,或nil以使用默认的间距量。调整视图垂直方向的距离。
  • content:提供一个视图。

content被锚定到父视图中指定的垂直边缘,使其水平轴与指定的alignment对齐。安全区高度不够的时候会根据content视图的高度决定。

写在最后

本篇文章主要了解了如何在SwiftUI中管理安全区域。通常,我们不需要管它,因为SwiftUI会自动处理它。但是我们也可以使用安全区域视图修饰器自定义内容以及一些外观等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/845596.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【工具类】java中自写工具类在实体中直接使用注解进行数据类型转换

目录 一、背景 二、数字 将转字符串转换为整数&#xff0c;并且忽略0 三、字符串转换为整数 四、使用 一、背景 我在项目中前辈的代码中发现了在使用lombok时&#xff0c;可以直接在某个属性上面做限制&#xff0c;然后我就发现这个前辈直接写了限制的工具类&#xff0c;我…

Java—— StringBuilder 和 StringBuffer

1.介绍 由于String的不可更改特性&#xff0c;为了方便字符串的修改&#xff0c;Java中又提供了StringBuilder和Stringbuffer类&#xff0c;这两个类大部分功能是相同的&#xff0c;以下为常用方法&#xff1a; public static void main(String[] args) {StringBuilder sb1 n…

Leecode---347:输出前k个高频元素(使用unordered_map)

题目&#xff1a; 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 思路&#xff1a; 三步&#xff1a; 1、用map来记录每个元素出现的次数 2、按map中的值大小排序&#xff0c;先让其有序&#xff0c;再逆…

百度中心之星

目录 新材料 星际航行 新材料 直接模拟&#xff1a;因为要考虑上次出现的位置&#xff0c;所以使用map映射最好&#xff0c;如果没有出现过就建立新映射&#xff0c;如果出现过但是已经反应过就跳过&#xff0c;如果出现过但是不足以反应&#xff0c;就建立新映射&#xff0c;…

react 怎样配置ant design Pro 路由?

Ant Design Pro 是基于 umi 和 dva 的框架&#xff0c;umi 已经预置了路由功能&#xff0c;只需要在 config/router.config.js 中添加路由信息即可。 例如&#xff0c;假设你需要为 HelloWorld 组件创建一个路由&#xff0c;你可以将以下代码添加到 config/router.config.js 中…

parallels版虚拟机Linux中安装parallels tools报错

按照一个博客的教程安装的可还是安装不了&#xff0c;请指点指点 1.先是输入name -a 输出&#xff1a;Linux user 6.6.9-arm64 #11 SMP Kali 6.6.9-1kali1 (2024-01-08) aarch64GNU/Linux2.按照版本号找对应的文件并下载 第一个文件&#xff1a; linux-headers-6.6.9-arm64_…

深度学习之梯度缩放介绍

混合训练&#xff08;Mixed Precision Training&#xff09;是一种优化深度学习模型训练过程的技术&#xff0c;其中梯度缩放&#xff08;Gradient Scaling&#xff09;是混合训练中常用的一项技术。 在深度学习中&#xff0c;梯度是用于更新模型参数的关键信息。然而&#xff…

Three.js 性能监测工具 Stats.js

目录 前言 性能监控 引入 Stats 使用Stats 代码 前言 通过stats.js库可以查看three.js当前的渲染性能&#xff0c;具体说就是计算three.js的渲染帧率(FPS),所谓渲染帧率(FPS)&#xff0c;简单说就是three.js每秒钟完成的渲染次数&#xff0c;一般渲染达到每秒钟60次为…

sqlite--SQL语句进阶

SQL语句进阶 函数和聚合 函数&#xff1a; SQL 语句支持利用函数来处理数据&#xff0c; 函数一般是在数据上执行的&#xff0c; 它给数据的转换和处理提供了方便常用的文本处理函数&#xff1a; 常用的文本处理函数&#xff1a; // 返回字符串的长度 length();//将字符串…

LeetCode42:接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 代码 单调栈 class Solution { public:int trap(vector<int>& height) {stack<int> stk;int result 0;stk.push(0);for (int …

MoeCTF 2022 usb

直接找 URB的第一个输入协议 我们需要提取的数据 HID Data 提取过滤器 tshark -r usb.pcapng -Y "usb.src\"2.2.1\"" -T json >1.json 拿 usbhid.data 字段 tshark -r usb.pcapng -Y "usb.src\"2.2.1\"" -T json -e usbhid.data …

如何在window是安装mysql数据库(从零开始)

mysql简介&#xff1a; MySQL是一种开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它是目前世界上最流行的数据库之一。MySQL最初由瑞典的MySQL AB公司开发&#xff0c;后来被Sun Microsystems收购&#xff0c;而后Sun Microsystems又被Oracle收购。My…

WPF 依赖属性原理、 附加属性

依赖属性如何节约内存 MSDN中给出了下面几种应用依赖属性的场景&#xff1a; 希望可在样式中设置属性。 希望属性支持数据绑定。 希望可使用动态资源引用设置属性。 希望从元素树中的父元素自动继承属性值。 希望属性可进行动画处理。 希望属性系统在属性系统、环境或用户…

离线数仓之MaxCompute

官方文档 简介 MaxCompute&#xff08;原名ODPS&#xff0c;Open Data Processing Service&#xff09;是一种典型的离线数仓解决方案。它是由阿里巴巴集团自主研发的大数据计算和存储平台&#xff0c;旨在支持大规模数据处理和分析。对于实时数据处理&#xff0c;MaxCompute…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-24.3,4 SPI驱动实验-I.MX6U SPI 寄存器

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

【小白专用 已验证24.5.30】ThinkPHP6 视图

ThinkPHP6 视图 模板引擎支持普通标签和XML标签方式两种标签定义&#xff0c;分别用于不同的目的 标签类型描述普通标签主要用于输出变量、函数过滤和做一些基本的运算操作XML标签也称为标签库标签&#xff0c;主要完成一些逻辑判断、控制和循环输出&#xff0c;并且可扩展 c…

Vue:现代前端开发的首选框架-【基础篇】

引言 在众多前端框架中&#xff0c;Vue.js 以其独特的优势脱颖而出&#xff0c;成为现代前端开发的首选框架之一。本文将首先介绍 Vue.js 的优势&#xff0c;随后详细讲解如何搭建 Vue.js 开发环境&#xff0c;并深入探讨 Vue.js 的核心概念。 Vue.js 的优势 选择 Vue.js 作…

SpringBoot整合Shiro流程

1.pom.xml导入shiro相关jar包 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version> </dependency> <dependency><groupId>org.apache.shiro</gr…

注意力可视化代码

读取网络层输出的特征到txt文件&#xff0c;arr为文件名 def hot(self, feature, arr):# 在第二维&#xff08;通道维&#xff09;上相加summed_tensor torch.sum(feature, dim1, keepdimTrue) # 结果形状为 [1, 1, 64, 64]selected_matrix summed_tensor.squeeze(1) # 移除…

牛客小白月赛95

c相助 题目描述 此题为E题的easy版&#xff0c;只有aia_iai​的数据范围不同。 给你一个 nnn 个正整数组成的数组 a &#xff0c;你每次操作可以选择一对 (i,j)( i, j )(i,j)&#xff0c;满足 1≤i<j≤n1 \leq i < j \leq n1≤i<j≤n&#xff0c;且 aiaja_{i} a_{…