swiftui自定义导航条

192 阅读2分钟

按照我的设想是,传入一个自定义view就好了,而不是在导航条上修修补补。完全自定义view。 如下:

image.png

image.png

image.png

image.png

这就是一个完全自定义的view。

难点1:不插入spacer的话,宽度只有内容那么多,使用spacer才能让内容充满屏幕 难点2: 底部插入一个spacer,才能把导航条顶到最上面

使用

现在用了spacer把导航条顶上去了,但是实际上此处要放置自定义内容。所以不能放spacer。

image.png

此处的难点有两个 1.把content作为参数的写法。 2.init方法需要传入一个@viewbuilder,参数类型是一个闭包,闭包的返回值是一个view 这样就可以允许外部传入使用的view了。 4.content的最大宽高要设置为.infinity,这样就会撑满所有空间,把nav顶上去。

其实这里我有点问题,为啥不是设置宽高,而是maxwidth和maxheight呢。 gpt的说明是,width和height是一种明确的宽高,而maxwidth和maxheight则是要求自适应占满全部剩余空间。如果给width和height用.infinity,可能会字面意思上无限大?

按照g老师的说法,如果文字本身占有了大小是(100,50),但是设置了最小值为(200,100),那么最小值就生效了。

如果文字本身占用了(1000,500),设置了最大值(500,200),那么最大值会生效。 默认的话内容会自适应的。

那么我理解,因为我们没有设置宽高,content占用的空间肯定是内容大小,但是此处制定了最大值,那么就会优先使用这个最大值。

接下来就是外部使用了

image.png

传入自己的页面即可。