今天,我们将了解 SwiftUI 引入的新内容边距概念以及它与安全区域的区别。创建示例让我们从一个简单的示例开始,演示带有一百个项目的列表。...你可以在 Playground 中运行此代码以查看结果。总结本文介绍了 SwiftUI 中的内容边距管理,通过对比安全区域的概念,解释了内容边距的重要性。...文章从创建示例开始,展示了在列表视图中如何处理内容边距的问题。...随后,通过介绍 UIKit 中的 readableContentGuide 布局指南以及 SwiftUI 中的 safeAreaPadding 视图修饰符,展示了在 iPad 上适配内容边距的方法。...最后,引入了 contentMargins 视图修饰符,并详细解释了其用法和参数,以及如何使用它来管理内容边距。通过本文,读者可以更好地理解并掌握 SwiftUI 中内容边距的管理技巧。
2017-11-07 07:23:04 两栏布局 在页面中经常会遇到两列的情况,比如说左侧栏固定宽度,右侧栏自适应宽度,此时可以用flex布局的方式,但是这种方式在ie8上不兼容,但是也可以用table...这里我们来说用margin的负值来实现两栏布局。...去除列表右边距 项目中经常会使用浮动列表展示信息,为了美观通常为每个列表之间设置一定的间距(margin-right),当父元素的宽度固定式,每一行的最右端的li元素的右边距就多余了,去除的方法通常是为最右端的...利用负margin就可以实现下面这种效果: html: 子元素1 子元素...去除列表最后一个li元素的border-bottom 列表中我们经常会添加border-bottom值,最后一个li的border-bottom往往会与外边框重合,视觉上不雅观,往往要移除。
其实以webkit为核心的浏览器,包括但不限于Safari和Chrome,也有一个关于浮动和边距的bug,同样会造成布局错误。...这个BFC元素没有指定宽度值(或者指定width:auto) 当满足触发条件时,该BFC元素的另一侧的边距将不再受css控制(在webkit核心浏览器下),而是由你所指定的与浮动元素相同的边距决定,即使你在...css中明确指定另一侧的边距为0或任意值也没用。...具体来说,可以分为两种情况: 当BFC与浮动方向相同的边距小于或等于浮动元素占据的总宽度(width+margin+padding+border)时,BFC另一侧的边距等于所设定方向上的边距(下图前两种情况...); 当BFC与浮动方向相同的边距大于浮动元素占据的总宽度时,BFC另一侧的边距等于浮动元素占据的总宽度(下图第三种情况)。
- `padding(.top, 100)` 设置了 `VStack` 的顶部内边距为 100,以在视图顶部留出一些空间。### 5....### 基本用法- **`.padding()`**:默认情况下,会在视图的四个边(上、下、左、右)都添加一个默认的内边距。内边距的大小由系统决定,通常是 16 个点。...### 自定义内边距大小- **`.padding(20)`**:可以通过在 `.padding()` 中传入一个数值,指定具体的内边距大小(单位是点)。...- **`.padding(.leading, 10)`** 和 **`.padding(.top, 5)`**:你还可以为某个特定的边添加内边距,例如左侧(leading)、顶部(top)、右侧(trailing....padding(.leading, 10) .padding(.top, 5) 这段代码会为 `Text` 视图的左侧添加 10 点内边距,顶部添加 5 点内边距。
父子元素边距重叠 场景一:先来看这段代码,预计实现的结果应该是父容器距离页面顶部 100px,子容器距离父容器 100px 。...现象: 发生了边距重叠,一个盒子和其子孙的边距重叠。 规则:正正取最大,负负取最负,正负就相加。...原因:根据规范,一个盒子如果没有添加 BFC,那么它的上边距应该和其文档流中的第一个子元素的上边距重叠。 解决: 通过给父容器添加 overflow: hidden 属性,使之成为 BFC 。...现象:发生了边距重叠,两个兄弟元素的上边距和下边距发生了重叠。 规则:正正取最大,负负取最负,正负就相加。 原因:块级元素的上外边距或下外边距有时(直接接触/相邻时)会合并为一个外边距。...现象:发生了边距重叠,所有的空元素的边距重叠成一个空元素的边距。 原因:如果一个块级元素没有任何内容并且设置了 margin-top 和 margin-bottom 时会发生 margin 合并。
布局相关知识 1 盒子模型 外盒子 在计算宽高时要算外边距。 内盒子在计算宽高时不计算内边距。 块级元素在普通文档流中独占一行,可设置宽高宽度默认是父级100%,内外边距,可容纳其他元素。...行内元素在普通文档流中不独占一行,不可设置宽高,宽度高度默认是内部元素宽度,水平方向可设置内外边距,可容纳文本或者其他行内元素 a标签特殊 行内块在普通文档流中不独占一行,可设置宽高,内外边距,可容纳其他元素但是相邻元素之间会有缝隙...浮动元素排列的位置,跟上一个元素有关系,如果上一个元素有浮动,则a元素顶部会和上一个元素的顶部对齐,如果上一个元素是标准流,则a元素的顶部会和上一个元素的底部对齐。...如果决定定位给盒子指定了定位,但是没有给与偏移距离,则盒子以标准流来显示排序,和上个盒子的底边对齐但是不占位置。 (定位适用于消息提示) 布局中的子绝父相的道理。...而父元素在进行布局时,需要占用位置,因此父亲只能是相对定位(相对定位不会脱标,绝对定位会脱标) z-index可以改变定位元素的堆叠顺序,可以取正,负,0.数字越大定位元素在堆叠元素中越居上。
-- 你的主界面内容,必须放置在Drawerlayout中的第一个位置 根据自己的需要来放置控件, 例如:LinearLayout布局或者RelativeLayout布局;...-- 用来放Drawerlayout中的内容, 这里使用NavigationView来实现类似Google pLay中的侧滑栏效果, 必须在build.gradle中添加compile...-- 属性解析: app:headerLayout: NavigationView中头部的head部分的布局,是自己实现的; app...:menu: 指定Nav中的Menu布局,就是自己写Menu中的按钮,要放在res/menu/文件夹下; app:itemTextColor: 用来设置Nav...app:cardPreventCornerOverlap : 在v20和之前的版本中添加内边距, 这个属性是为了防止卡片内容和边角的重叠
为其正名 我们都使用过CSS得外边距,但是当谈到负边距的时候,我们好像往差的方向发展啦。在网页设计中负边距的使用出现了两种极端,一种特别喜欢它,也有一些人认为这完全就是魔鬼的作品。...学以致用 既然我们知道使用负边距在CSS2中是有效的,使用它可以给我们提供一些非常有趣的CSS技巧。 把单个列表变成三列 如果你有一个列表垂直方向太长了,为什么不把它分成几列呢?...就不需要浪费很多贷款来加载大的图片来实现这个效果啦 简单的两列布局 负边距也是在流式布局中创建简单一列宽度固定,一列内容为宽度的100%的两列布局的好方法。...灵活的文档布局是一种可访问性和SEO的技巧,通过它能够让你根据你的关注点以任意顺序组织你的html代码。这里有一个文章讨论了负边距在多列布局中的应用。 微调元素 这是负外边距最常也是最简单的使用方式。...假如你把第十个div插入到9个其他的div中,不知道什么原因没有正确的排列,使用负边距来调整这个div就不需要改变其他9个div了,很方便。
在上面的模型中,一个元素具有底部边缘,而另一个元素具有顶部边缘。 具有较大边距的元素获胜。 为避免此类问题,建议根据本文使用单向边距。...负边距 它可以与四个方向的边距一起使用,在某些用例中非常有用。 让我们假设以下内容: 父级有 padding: 1rem,这导致子级从顶部、左侧和右侧偏移。 但是,子元素应该紧贴其父元素的边缘。...editors=1100 另一个类似的概念是向两边添加填充,然后边距为负。...由于应用于父元素 .card__content 的填充,边框不会粘在边缘上。 是的,你猜对了! 负边距是解决办法。...以下是我想到的一些问题: 间隔组件如何在父组件中获取其宽度或高度?它将如何在水平和垂直布局中工作?例如:堆栈内的间隔符与添加左侧空间的间隔符。
因此,在之前的例子中, p 盒和 img 浮动盒的垂直外边距不会折叠。...浮动可以同常规流中的其他盒重叠(例如,当浮动旁边的常规流盒有负margin的时候)。...该父块的位置由关于外边距折叠那章的规则定义。 浮动盒的上外边缘不可高于源文档中此前元素生成的块盒或浮动盒的上外边缘。 元素的浮动盒的上外边缘不可高于源文档中此前元素生成的盒所在的行盒的顶部。...但是在CSS2.2中,如果,在BFC中,有一个文档流内负垂直高度的外边距,使得浮动的位置高于它原本应当在的位置,所有这种负外边距被设为零,浮动的位置则未定义。... 说明:要是没有 clear ,首段和末段两个段落的边距将会折叠并且末段的上边框边缘将同浮动段落的顶部齐平。如下: ? 但 clear 使得上边框边缘低于浮动,即下降2em。
圣杯布局的起源 In Search of the Holy Grail 圣杯布局解决的问题 两边定宽,中间自适应的三栏布局,中间栏要放在文档流前面以优先渲染。...第二步:采用负边距将left和right放到左右两边 1....当左右设置不同方向负边距margin-left和margin-right .left{margin-left:-100%;} .right{margin-right:-100px;} 当左右设置同方向负边距...此时我们可以清晰的看到center的左右两边都被left和center遮挡,此时圣杯布局如何处理呢? 第三步:用相对定位来解决 1....当左右设置不同方向负边距margin-left和margin-right .left{right:100px;} 当左右设置同方向负边距margin-left .left{right:100px;
边距塌陷(Collapsing margins) 在CSS中,两个或多个框(可能是也可能不是兄弟)的相邻边距可以合并形成一个边距,称为边距塌陷。...不会发生边距坍塌的情况 根节点元素 水平边距(Horizontal margins)不会崩溃 「如果具有间隙的元素的顶部和底部相邻,他会与后续同级的元素边距一起坍塌,但是不会与父元素底部的一起坍塌(If...「如果'min-height'属性为零,并且框没有顶部或底部边框,也没有顶部或底部填充,并且框的'height'为0或'auto',并且框不包含边距,则框自身的边距会折叠 行框,其所有流入子页边距(如果有的话...2.当边距全为负数的时候,取最小值。 3.在存在负边距的情况下,从正边距的最大值中减去负边距的绝对值的最大值。...-> 边距塌陷(Collapsing margins) 想不到小小的面试题,居然可以牵扯出这么多的知识,所以我们在面对一些面试题的时候,例如实现一个自适应的正方形布局,别单单看有几种方式能够实现,解决方法永远会随着时间的推进
在上面的模型中,一个元素有 margin-bottom,另一个元素有 margin-top,边距较大的元素获胜。 为避免此类问题,建议按照本文使用单向边距。...此外,CSS Tricks还在页边距底部和页边距顶部之间进行了投票。61%的开发者更喜欢 margin-bottom 而不是 margin-top。...请注意,子元素固定在其父元素的顶部。那是因为它的边距折叠了。...所以,它将把 .wrapper 元素推到左边,取消那个不需要的空间。 另一个类似的概念是在两边都添加填充,然后边距为负。这是Facebook故事的一个示例: ?...负边距是解决办法。
负外边距的具体行为取决于设置在元素的哪边: 如果设置左边或顶部的负外边距,元素就会相应地向左或向上移动,导致元素与它前面的元素重叠 如果设置右边或者底部的负外边距,并不会移动元素,而是将它后面的元素拉过来...给元素底部加上负外边距并不等同于给它下面的元素顶部加上负外边距 如果不给一个块级元素指定宽度,它会自然地填充容器的宽度 如果在右边加上负外边距,则会把它拉出容器。...如果在左边再加上相等的负外边距,元素的两边都会扩展到容器外面 如果元素被别的元素遮挡, 利用负外边距让元素重叠的做法可能导致元素不可点击。...负外边距并不常用,但是在某些场景下很实用,尤其是当创建列布局的时候。不过应当避免频繁使用,不然网页的样式就会失控。 # 外边距折叠 当顶部和/或底部的外边距相邻时,就会重叠,产生单个外边距。...为了应对更多变化,可以使用更通用的解决方案:猫头鹰选择器。 猫头鹰选择器的顶部外边距对侧边栏有个副作用。因为侧边栏是主列的相邻兄弟元素,所以它也会有顶部外边距。
构成 ; 3、边偏移 边偏移 : 顶部偏移量 : 盒子模型 距离 父容器 上边线 的长度 , 如 : top: 10px ; 底部偏移量 : 盒子模型 距离 父容器 下边线 的长度 , 如 : bottom...盒子模型 相对于 其在 标准流中的位置 设置的 ; 如 : 盒子模型 在标准流 中 , 原来的位置是 (0 , 0) , 设置了相对定位 , 就是 相对于原来的位置 (0, 0) 进行 边偏移 后的位置...; 固定定位 完全脱离 标准流 , 不占用 布局中的位置 , 漂浮在任何元素上方 ; 固定定位 只相对于 浏览器可视窗口 进行定位 , 定位的方式是通过 " 浏览器可视窗口 + 边偏移 " 进行定位...在 网页布局 中 , 如果 多个盒子都设置 绝对定位 , 那么这些盒子会堆叠在一起 ; 设置了定位样式的盒子会压住标准流盒子 , 如果有多个设置定位的盒子 , 后面的盒子会压住前面的盒子 ; 下面的代码中...; 如果 子盒子设置 100 像素的外边距 , 父盒子也会被带下来 , 这就是外边距塌陷 ; 下面的示例 1 中 , 父盒子 和 子盒子 没有添加任何外边距 , 没有塌陷 ; 示例 2 中 , 为子盒子设置了
通过负边距将浮动的侧栏拉上来,左侧栏的负边距为100%,刚好是窗口的宽度,因此会从主面板下面的左边跑到与主面板对齐的左边,右侧栏此时浮动在主面板下面的左边,设置负边距为负的自身宽度刚好浮动到主面板对齐的右边...由于侧栏的负margin都是相对主面板的,两个侧栏并不会像我们理想中的停靠在左右两边,而是跟着缩小的主面板一起向中间靠拢。此时使用相对布局,调整两个侧栏到相应的位置。...设置main宽度为100%,设置两侧栏的宽度。 设置 负边距,sub设置负左边距为100%,extra设置负左边距为负的自身宽度。 设置main的padding值给左右两个子面板留出空间。...,由于两侧栏的负边距都是相对于main-wrap而言,main的margin值变化便不会影响两个侧栏,因此省掉了对两侧栏设置相对布局的步骤。...设置main-wrap宽度为100%,设置两个侧栏的宽度。 设置 负边距,sub设置负左边距为100%,extra设置负左边距为负的自身宽度。 设置main的margin值给左右两个子面板留出空间。
绝对定位 + 负边距:使用绝对定位并设置左右负边距和上下负边距,就可以实现水平和垂直居中的效果。...center-element { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); } flex 布局...:使用 flex 布局可以轻松实现水平和垂直居中。...:使用 grid 布局也可以实现水平和垂直居中。....center-container { display: grid; place-items: center; } 这些方法都可以实现水平和垂直居中的效果,您可以根据需要选择一种方法使用。
新建完项目,自带的布局效果是这样的,如下: ? 从图中,我们可以看到菜单列表,这个菜单列表是我们刚开始建项目时自动生成的,系统默认的,我们需要定制这个菜单变成我们自己的。...headerLayout就是对应菜单的顶部部分,一般用来显示用户信息什么的,menu则对应实际的菜单选项。...我们从上面的布局代码中可以看出分别对应的就是 app:headerLayout和app:menu。 headerLayout 布局代码如下: 布局文件中把 app:headerLayout="@layout/header_layout" 这行代码去掉,否则会重复的。...主题和配色 上面用到的主题和颜色,我们可以在资源文件中配置。 比如color中: <?xml version="1.0" encoding="utf-8"?
有关DrawerLayout的详细说明参见《Android开发笔记(一百二十)两种侧滑布局》,这里就不再赘述了,接下来要介绍的是Android自带的导航视图NavigationView,它是一个侧滑菜单控件...从上图可以看到,导航视图的组成部分不外乎两块,一块位于页面顶部,可展示用户头像、用户昵称、用户头衔等个人信息;另一块位于页面剩余部分,主要提供前往子栏目的导航菜单,每个菜单项均为左图标右文字的布局形式。...在布局文件中使用NavigationView,可设置以下几个专门属性: app:headerLayout : 指定头部布局的资源文件。 app:menu : 指定导航菜单的资源文件。...menu/menu_one" app:itemIconTint="#5555ff" /> 下面是布局文件中引用的导航菜单文件...虽说是自定义,其实也没这么复杂,只需把布局文件中原来NavigationView的节点位置换成ListView即可,使用ListView就能随意定制菜单项的布局和风格了。
领取专属 10元无门槛券
手把手带您无忧上云