Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

「親Viewのサイズや座標を使わなくても実現できることにGeometryReaderを使わない」の追加 #42

Open
uhooi opened this issue Jun 29, 2022 · 4 comments

Comments

@uhooi
Copy link

uhooi commented Jun 29, 2022

GeometryReader を使うことで、親 View のサイズや座標を取得できます。
非常に便利ですが、親 View のサイズや座標を使わなくても実現できることは、GeometryReader を使わないほうがネストが減って意図が伝わりやすくなることが多いと思います。

例えば「View を親 View の幅に合わせる」は以下のように実現できます。

// △
var body: some View {
  GeometryReader { geometryProxy in
    Text("Foo")
      .frame(width: geometryProxy.size.width)
  }
}

しかし「View を幅いっぱいに広げる」と考えれば、GeometryReader を使わずに実現できます。

// ○
var body: some View {
  Text("Foo")
    .frame(maxWidth: .infinity)
}

細かく検証できていないので、この2つは動作が異なるかもしれませんが、後者のほうが読みやすいと思います。

あと理由はわかりませんが、GeometryReader を使うとプレビュー時に View が中央寄せでなく上寄せで表示されてしまいます。

Reference

@uhooi
Copy link
Author

uhooi commented Jun 29, 2022

あと理由はわかりませんが、GeometryReader を使うとプレビュー時に View が中央寄せでなく上寄せで表示されてしまいます。

確かめられていませんが、もしかしたら (0, 0) の座標に配置されるのかもしれません。

@YusukeHosonuma
Copy link
Owner

アイディアありがとうございます!

このあたりは小手先のテクニックとして消化するよりも、GeometryReader やレイアウトの仕組みといったより大きなトピックで理解するのが良いように感じるので、ある程度テクニックがまとまってから書こうかなと思いました 🙏 (『GeometryReader で何が実現できるのか理解する』というトピックを執筆する予定ではありました)

あと理由はわかりませんが、GeometryReader を使うとプレビュー時に View が中央寄せでなく上寄せで表示されてしまいます。

そうなんですよね... GeometryReader は他の多くの SwiftUI のコンテナのデフォルトである center ではなく topLeading の Alignment を持つんですよね。

ふと、実装ミスに気づきやすくする目的なのではないかと思いましたが、単なる直感なのであっているかは微妙ですw
https://twitter.com/tobi462/status/1542633362292375552?s=20&t=d9VM00jPOGy6_6H48_iX6w

@uhooi
Copy link
Author

uhooi commented Jul 1, 2022

あ、それがいいですね!
私はそもそもまだ GeometryReader でできることや使う目的などをちゃんと理解していないので、このような Issue になってしまいました🙏

なるほど、デフォルトのアラインメントが .topLeading になっているのですね、それにすら気づけなかったです…。
実装ミスに気づけやすくする、はありそうですね!(具体例はわかっていませんが)
あとは座標を扱うので (0, 0) の位置にあるほうが直感的とか…?(わかりませんが)

@YusukeHosonuma
Copy link
Owner

私はそもそもまだ GeometryReader でできることや使う目的などをちゃんと理解していないので、このような Issue になってしまいました🙏

あ、Issue に上げていただいた部分を疑問・改善として捉えるというのは私の中で思いついていなかったので、とても参考になりました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants