2 Comments
Jul 15, 2022·edited Jul 15, 2022Liked by 13

13 你好。斗膽發表一點反駁意見。

用 Color 搭配 .overlay 來排版完全是對 Color 的誤用。

添加了不必要的 View 層級,也大大降低了代碼可讀性。

Color 看起来有平分空间的特性不是因为它是 Color,而是因为:

1. 它被设置成「佔用所有可用空間(ProposedViewSize)」的效果

2. HStack 对拥有该效果且 LayoutPriority 相等的所有 Child View 进行可用空间的平分

1的效果所有 Shape(Rectangle、Circle)都有,GeometryReader 也有。

講2是因為如果你給 Child View 添加不同的 LayoutPriority,這種效果就會失效。

最直接且正統的做法應該是给需要这种效果的 Child View 添加 .frame(maxWidth(or Height): .infinity),即告訴 SwiftUI「我要让這個 View 佔用尽可能大的可用空間」。

當然,說實話我不太相信13會不懂這個,但 SwiftUI 新手看到這篇文章很有可能就這麼開始誤用了所以以免萬一。

Expand full comment
author

謝謝你關於 ProposedViewSize 的補充。關於為何我沒提 .frame(.infinity) 而是教新手使用 Color.clear.overlay,之後聊到可讀性的時候再多說一點。畢竟官方定義正統的 API 用法跟實務上累積出的習慣,還是有些落差,我在這個專欄傾向多談後者。

Expand full comment