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

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

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

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

Q&A

解決済

1回答

4007閲覧

Swift SafeArea 画面レイアウトが崩れる

takokakao214

総合スコア21

Swift

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

0グッド

0クリップ

投稿2019/08/29 05:50

前提・実現したいこと

Swift
TableViewでグリッド表示した画面がSafeAreaを無視していたため
コード上でSafeAreaの制限をかけたところ、どうしても画面のレイアウトが崩れてしまいました。

イメージ説明

発生している問題・エラーメッセージ

上に添付した画像において
・左上と右上がなぜか灰色になる
・右側だけSafeAreaがまもられていない

該当のソースコード

Swift

1@IBOutlet weak var view_customtableview: UIView! 2var tableView: CustomUITableView = CustomUITableView() 3 4var topPadding:CGFloat = 0 5var bottomPadding:CGFloat = 0 6var leftPadding:CGFloat = 0 7var rightPadding:CGFloat = 0 8 9override func viewWillLayoutSubviews() { 10 super.viewWillLayoutSubviews() 11 let screenWidth:CGFloat = view.frame.size.widt 12 let screenHeight:CGFloat = view.frame.size.height 13 let safeAreaInsets: UIEdgeInsets 14 if #available(iOS 11, *){ 15 safeAreaInsets = view.safeAreaInsets 16 }else{ 17 safeAreaInsets = .zero 18 } 19 print("safeAreaInsets: (safeAreaInsets)") 20 if #available(iOS 11.0, *) { 21 let window = UIApplication.shared.keyWindow 22 topPadding = window!.safeAreaInsets.top 23 bottomPadding = window!.safeAreaInsets.bottom 24 leftPadding = window!.safeAreaInsets.left 25 rightPadding = window!.safeAreaInsets.right 26 } 27 // portrait 28 var safeAreaWidth = screenWidth - leftPadding - rightPadding 29 var safeAreaHeight = (screenHeight) - topPadding - bottomPadding 30 // landscape 31 if(screenWidth > screenHeight){ 32 safeAreaWidth = screenWidth - leftPadding - rightPadding 33 safeAreaHeight = (screenHeight) - topPadding - bottomPadding 34 } 35 let rect = CGRect(x: leftPadding, 36 y: topPadding, 37 width: safeAreaWidth, 38 height: safeAreaHeight) 39 tableView.frame = rect 40 view_customtableview.frame = rect 41 self.tableView.makeHeaderAndTableViewAutoLayout(uiViewController: 42 self,tableView: tableView,drawSpaceView:view_customtableview) 43} 44 45override func viewDidLoad() { 46 super.viewDidLoad() 47 // Do any additional setup after loading the view. 48 49 view_customtableview.translatesAutoresizingMaskIntoConstraints = false 50 UIApplication.shared.beginReceivingRemoteControlEvents() 51 self.becomeFirstResponder() 52 53 app.row = nil 54 tableView.initSetting(view: self) 55 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "no",headerText: "No",width: tableView.calWidth)) 56 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "type",headerText: "類別",width: 90)) 57 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "articleno",headerText: "品番",width: 95)) 58 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "name",headerText: "製品名",width: 180)) 59 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "count",headerText: "数",width: tableView.calWidth)) 60 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "note",headerText: "備考",width: 100)) 61 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "weight",headerText: "重量",width:50)) 62 tableView.cols.append(GridColumn().initWithPropertyName(propertyName: "place",headerText: "保管場所",width: 115)) 63 64 65tableView.rows.append(["no":"1","type":"AAA","articleno":"00000","name":"aaa","count":"4","note":"","weight":"0.000","place":""]) 66 tableView.rows.append(["no":"2","type":"BBB","articleno":"00001","name":"bbb","count":"4","note":"","weight":"5.200","place":""]) 67 tableView.rows.append(["no":"3","type":"CCC","articleno":"00002","name":"ccc","count":"8","note":"","weight":"4.000","place":""]) 68 tableView.rows.append(["no":"4","type":"DDD","articleno":"00003","name":"ddd","count":"16","note":"","weight":"0.200","place":""]) 69 70} 71

補足情報

どうやら、ほかの画面から遷移した場合にこのようになるっぽいです。

なぜそうなるのかわからなかったので、こちらにて質問させていただきます。

何卒よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

再現させられるものが手元にないので、いい加減な回答になります。

上に添付した画像において
・左上と右上がなぜか灰色になる

Debug View Hierarchyを使えば、何が灰色として表示されているか分かりますので、試してみてください。
(縦線として置いているものが何らかの原因で伸びているのかなと予想)

・右側だけSafeAreaがまもられていない

①ノッチの部分は黒くなっている、かつ②そこから表までノッチの高さ分ほどの白い領域があるので、
②の部分が余計にずれているのではないかと思います。

ご参考まで。

※なお詳しいことを聞かれても、何もわかりません。

投稿2019/08/29 08:28

編集2019/08/29 08:29
takabosoft

総合スコア8356

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

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

takokakao214

2019/08/29 09:06

なるほどです。 余計にずれてるってのは多分ありそう。。。 確認してみます。 また何か進捗ありましたら、こちらにご報告致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問