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

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

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

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

Q&A

解決済

3回答

437閲覧

XIBにて水平に配置したラベル2つのうち右側に配置したラベルが左端に寄ってしまう

akiraa

総合スコア11

Swift

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

0グッド

1クリップ

投稿2018/03/24 05:21

編集2018/03/26 15:11

前提・実現したいこと

SwiftでAutolayoutを使ってマルチレイアウト化したい
配置したラベルを右端と左端に寄せたい

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

XIBにて水平に配置したラベル2つのうち右側に配置したラベルが左端に寄ってしまう

試したこと

ラベル二つを選択しResolve Auto Layout IssuesのAdd Missing Constraintsを実施

補足情報(FW/ツールのバージョンなど)

XIBファイルにラベル2つを水平に配置して、それぞれを選択してレイアウトを設定しても右側に配置したラベルが
左端に配置したものと重なってしまう

Autolayoutの使いかたが間違ってますでしょうか?

左側のラベルの制約情報です
イメージ説明

右側のラベルの制約情報です
イメージ説明

XIBファイルのキャプチャ画像です
イメージ説明

実行時のキャプチャ画像です
イメージ説明

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

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

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

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

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

guest

回答3

0

Localization Issueのwarningが出ています。
おそらく、現在の制約ではローカライズしたときに問題が出るのでしょう。(右から左に書く言語のとき?)

以下の3つとも、warningが消えるところまでは確認しましたが、実際の表示に関しては未確認です。

その1

Storyboardのローカライズをやめる。下記の記事が参考になると思います。
Xcode 9 - Localization Issue Warning Storyboard

その2

Qtyの幅指定をやめて、代わりに下記の制約を追加する。

Qty.leading = trailing - 70

その3

Qtyの幅指定をSuperviewの幅の割合にする。

Qty.width = 0.2 x width

0.2は適当です。お好みに調整して下さい。
端末によって幅が変わります。

投稿2018/03/26 01:47

fuzzball

総合スコア16731

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

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

akiraa

2018/03/26 13:36

ご回答ありがとうございます わざわざポインターまで指し示してくださって重ね重ねありがとうございます 上記設定を入れてみましたが、XIBファイルではどうも効いていないようです 実行時に右側ラベルが左側に寄ってきました
fuzzball

2018/03/26 14:30

制約のwarningは消えてますか?
akiraa

2018/03/26 14:38

ご回答ありがとうございます はい、ワーニングは消えています
fuzzball

2018/03/26 14:42 編集

xibの背景色を白以外にしてみてもらえますか? 画面いっぱいに表示されてますか? あと、状況がイマイチ分からないので、スクリーンショットを載せてもらえますか?
akiraa

2018/03/26 15:12

ご回答ありがとうございます キャプチャ画像を追加しました
fuzzball

2018/03/26 15:16

xibはUITableViewCellですか?
akiraa

2018/03/27 01:12

ご回答ありがとうございます はい、TableViewCellです
fuzzball

2018/03/27 01:16

ItemとQtyはContent Viewの上に乗せてますか? Content Viewの背景色を白以外にして、どのように表示されるか教えてください。
akiraa

2018/03/27 04:18

はい、Content Viewに乗っています キャプチャー画像に乗せていますので、ご覧ください
fuzzball

2018/03/27 04:37

白以外にしても白く表示されるということでしょうか?(キチンと言葉で返信していただけますか)
akiraa

2018/03/27 11:15 編集

ご回答ありがとうございます 失礼しました 白以外にしても、白く表示されることも問題なんですが、いま第一の問題としているのは、実行時に右側のラベルが左側のラベルに重なって表示されることなんです
guest

0

左側のラベルが固定であるならばwidthを設定すればいかがでしょうか?
また動的である場合下記の画像にあるようなContent Hugging PriorityやCompression Registance Priorityを変更するとどうなりますでしょうか?

イメージ説明

参考記事:
https://moneyforward.com/engineers_blog/2016/04/05/auto-layout/

【追記】
同じ制約を設定しようとしてみたところ下記の状態になりました。この状態で右側のラベルがどのようになれば良いのでしょうか?

イメージ説明
イメージ説明

投稿2018/03/24 21:38

編集2018/03/25 21:25
newmt

総合スコア1277

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

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

akiraa

2018/03/25 05:03

ご回答ありがとうございます 教えていただいた数値を変更してみましたが、変化はありませんでした
newmt

2018/03/25 05:42

どのような制約をつけているかの画像など見せていただくことはできませんでしょうか?
akiraa

2018/03/25 15:45

返事が遅くなり申し訳ありません 制約情報のキャプチャ画像を追加しました どうぞご覧ください
newmt

2018/03/25 21:28

追記しました。私の貼った画像と同じ状態でしょうか?
akiraa

2018/03/26 13:28

ご回答ありがとうございます 右側のラベルはそのくらいの位置に配置されるのが希望です また、XIBファイルではなく検証として新規プロジェクトを作りStoryBoard上で配置したものは、実機でも崩れることはありませんでした どうもXIBファイルで作ったものはレイアウトが崩れます
newmt

2018/03/26 22:33

私の画像もXIBで作成しているものなのですが再現しませんね。 作成されているのはUITableViewCellでしょうか?TableViewに値を設定している箇所を見せて頂くことはできますでしょうか?
akiraa

2018/03/27 04:15

ご回答ありがとうございます はい、TableViewCellになります ソースは下記のものとなります func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell", for: indexPath) as! CustomTableViewCell //let cell = tableView.dequeueReusableCell(withIdentifier: "CustomTableViewCell") //?? UITableViewCell(style: .default, reuseIdentifier: "CustomTableViewCell") cell.item.text = self.items[indexPath.row].title cell.qty.text = String(self.items[indexPath.row].qty) //print("call cellForRowAt") return cell }
newmt

2018/03/27 08:04

ありがとうございます。念のため確認ですが、tableViewにcellは登録されていますでしょうか? let nib = UINib(nibName: "CustomTableViewCell", bundle: nil) tableView.register(nib, forCellReuseIdentifier: "CustomTableViewCell")
akiraa

2018/03/27 11:13

ご回答ありがとうございます はい、cellは登録されています self.tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "CustomTableViewCell")
guest

0

自己解決

fuzzballさん、newmtさんここまでご尽力くださりありがとうございます

なんとも乱暴な解決方法ですが、解決しました

CustomTableViewCell.swiftとCustomTableViewCell.xib ファイルを削除し再作成したところ
見事に現象が消え、セルの背景色も設定値通りになり、ラベルもAutoLayoutが効くようになりました

本当にありがとうございました

投稿2018/03/27 14:16

akiraa

総合スコア11

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問