質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1422閲覧

[SwiftUI] GeometryReaderを使ったものをScrollViewで並べると位置がずれてしまう

Hyperbolic4183

総合スコア17

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2020/05/31 02:25

##困っていること
iPhoneの大きさに合わせて相対的な大きさのビューを用いたいので、GeometryReaderを使っています。
イメージ説明
画像のビューはGeometryReaderで作られたビュー(①)とそれらをScrollIewで鉛直方向に配置するビュー(②)の2つでできています。
①はPreViewでも期待通りの挙動をするのですが、それらをスクロールビューで配置すると左によってしまいます。(スクロールはできる)
どのようにすれば真ん中に配置できるでしょうか。どんなことでもご指南いただければ幸いです。
##試したこと
左によっているということはframe(alignment: .leading)がデフォルトで設定されていると思い、②のビューに.frame(alignment: .center)を設定した。
##ソースコード

GeometryReaderで作られたビュー(①)

mport SwiftUI struct ListRow: View { var rValue: Int var gValue: Int var bValue: Int func judgeColorNumber (r:Int,g:Int,b:Int) -> Double { return Double(r)*0.299+Double(g)*0.587+Double(b)*0.114 } var body: some View { VStack { Group { if self.judgeColorNumber(r: self.rValue, g: self.gValue, b: self.bValue) < 186{ GeometryReader { geometry in //追加 Text("(String(self.rValue, radix: 16))(String(self.gValue, radix: 16))(String(self.bValue, radix: 16))") .foregroundColor(Color.white) .fontWeight(.semibold) .frame(width: geometry.size.width-50, height: 50, alignment: .center) .background(Color.init(UIColor(self.rValue,self.gValue,self.bValue))) .cornerRadius(10) .shadow(color: Color.gray.opacity(0.7), radius: 10.0, x: 0.0, y: 0.0) } } else { GeometryReader { geometry in Text("(String(self.rValue, radix: 16))(String(self.gValue, radix: 16))(String(self.bValue, radix: 16))") .foregroundColor(Color.black) .fontWeight(.semibold) .frame(width: geometry.size.width-50, height: 50) .background(Color.init(UIColor(self.rValue,self.gValue,self.bValue))) .cornerRadius(10) } } } .shadow(color: Color.gray.opacity(0.7), radius: 10.0, x: 0.0, y: 0.0) }.frame(height: 50) } } struct ListRow_Previews: PreviewProvider { static let favoriteArray = ObservedRGB() static var previews: some View { ListRow(rValue: 132, gValue: 30, bValue: 120) } }

ScrollIewで鉛直方向に配置するビュー(②)

import SwiftUI struct MainList: View { @EnvironmentObject var favoriteArray: ObservedRGB private func reversedFavoriteArray (arr: [[Int]]) -> [[Int]] { return arr.reversed() } var body: some View { NavigationView{ ScrollView(.vertical) { VStack(spacing: 10.0) { ForEach(0..<self.favoriteArray.rgbArray.count, id: .self) { item in ListRow(rValue: self.reversedFavoriteArray(arr: self.favoriteArray.rgbArray)[item][0], gValue: self.reversedFavoriteArray(arr: self.favoriteArray.rgbArray)[item][1], bValue: self.reversedFavoriteArray(arr: self.favoriteArray.rgbArray)[item][2]) }.frame(alignment: .center) } } .navigationBarTitle("cliped",displayMode: .inline) } } } struct MainList_Previews: PreviewProvider { static let favoriteArray = ObservedRGB() static var previews: some View { MainList().environmentObject(favoriteArray) } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問