SwiftUI 2
前回、結論は「使い物にならない」でしたが、今回は更に補強を。
基本的なグリッドを使ったデザイン。これを実現しようとするが全く使い物にならない。
例えば、5×5のグリッド(タイル)があったとして、そこに様々な大きさのブロックを敷き詰めるとし、ブロックの大きさが縦が2以上になると破綻する。
方法は、
GeometryReader を使って絶対位置配置をするか
.containerRelativeFrame を使ってサイズを相対指定するか
となる。
まず、GeometoryReader だが決定的な欠点がある。
通常のアプリならよいのだが、ウイジェットだとLinkによるボタンの設定が吹き飛んでしまう。何でもかんでもただ本体アプリを呼び出すだけとなる。
つまり使えない。
では、.containerRelativeFrame だが、これにも欠点がある。
折角、親のサイズに対しての倍率指定が可能なのだが、これがサイズにしか使えない。
ならば、.containerRelativeFrameを使った要素に対して、.overlay を使用すればイケるのではと思うのは至極当然。
だが、ここにも落とし穴がある。
通常の位置していの起点は左上にあるのだが、拡大縮小の起点は中心にある。さらにそれを調整するための.offset は、サイズそのもの数値でしか指定ができない。
そもそもウイジェットでは描画領域のサイズを取得すること自体がリスク。Linkを使ったボタンの設定が吹き飛ぶ上、前回記事で書いた勝手に型推論が破綻して論理的に正しくてもコンパイルも放棄される。
ズレは、中心が起点になるので倍率で指定できれば問題ないのだが、それが出来ず取得不能なサイズでの指定を強制される。
起点の設計が不統一かつ、属性の指定が統一できない。
これは設計上の不備と思わざるを得ない。
結果「使えない!!!」となっている現状。
単純な配置にしか使えないとなってしまう。
誰か解決法があるなら教えて下さい。