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

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

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

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

2253閲覧

SwiftのConstraintsをコードで書く方法について

P-san

総合スコア21

Xcode 7

Xcode 7は、ソフトウェア開発のためのアップルの統合開発環境であるXcodeのバージョン。UIを作成するために用いるグラフィカルツールです。iOS9/OS X El Capitan/watchOS2に対応。Swift 2コンパイラーが搭載されています。

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/09/05 05:49

###前提・実現したいこと
コードでテーブルセル内にラベルを複数配置しています。
現在、iPhone6の画面をベースに作成してるため、
それより小さいiPhone5などで起動するとラベルの文字が画面外にはみ出してしまいます。
Constraintsを使用すれば良いと思うのですが、Viewでないためか、うまくいきません。コードでどのように記述すれば良いのでしょうか。

よろしくお願いします。
###発生している問題・エラーメッセージ

また、下記のようにコードを書くと、デバッグエリアにこのようなメッセージが出てしまいます。

Unable to simultaneously satisfy constraints. Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) ( "<NSAutoresizingMaskLayoutConstraint:0x7fbf185a2290 h=--& v=--& UILabel:0x7fbf18597420.midY == + 55>", "<NSAutoresizingMaskLayoutConstraint:0x7fbf185a2300 h=--& v=--& V:[UILabel:0x7fbf18597420(20)]>", "<NSLayoutConstraint:0x7fbf18594290 UITableViewCellContentView:0x7fbf185a9230.top == UILabel:0x7fbf18597420.top>" ) Will attempt to recover by breaking constraint <NSLayoutConstraint:0x7fbf18594290 UITableViewCellContentView:0x7fbf185a9230.top == UILabel:0x7fbf18597420.top> Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger. The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

###該当のソースコード

// 省略 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = UITableViewCell(style: .Default, reuseIdentifier: "myCell") //日付 let dateLabel : UILabel = UILabel(frame: CGRectMake(10, 10, 50, 20)) dateLabel.text = dateTableViewList[indexPath.section][indexPath.row] dateLabel.textAlignment = NSTextAlignment.Center cell.contentView.addSubview(dateLabel) // メインテーマ let mainLabel : UILabel = UILabel(frame: CGRectMake(20, 10, 300, 20)) mainLabel.text = mainTableViewList[indexPath.section][indexPath.row] mainLabel.textAlignment = NSTextAlignment.Center cell.contentView.addSubview(mainLabel) // ここに下記のコードを書いた。 return cell } // 省略

###試したこと
上記のコードに以下のコードを書きましたが、うまくいきませんでした。

cell.contentView.translatesAutoresizingMaskIntoConstraints = false // 上辺の制約 cell.contentView.topAnchor.constraintEqualToAnchor(dateLabel.topAnchor, constant: 0.0).active = true // 下辺の制約 cell.contentView.bottomAnchor.constraintEqualToAnchor(dateLabel.bottomAnchor, constant: 0.0).active = true // 左辺の制約 cell.contentView.leadingAnchor.constraintEqualToAnchor(dateLabel.leadingAnchor, constant: 0.0).active = true // 右辺の制約 cell.contentView.trailingAnchor.constraintEqualToAnchor(dateLabel.trailingAnchor, constant: 0.0).active = true // 数値を変えても変化なし

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

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

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

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

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

fuzzball

2016/09/05 06:49

「Viewでないためか」というのはどういう意味でしょうか?UILabelもViewです。
P-san

2016/09/05 07:02

UILabelもViewなんですね。勘違いしていました。 目的は、dateLabelとmainLabelを固定したいです。 どのiPhone画面でもはみ出さないようにしたいです。
guest

回答1

0

ベストアンサー

時間がなくてちゃんと調べられていませんが、

swift

1//cell.contentView.translatesAutoresizingMaskIntoConstraints = false 2dateLabel.translatesAutoresizingMaskIntoConstraints = false

と、contentViewではなく、dateLabelのオートリサイズをoffにするとどうでしょうか?

投稿2016/09/05 07:18

編集2016/09/05 09:44
fuzzball

総合スコア16731

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

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

P-san

2016/09/05 08:47

すいません、具体的にどのように書けばよろしいのでしょうか? 以下のように書いても変化ありませんでした。 // 左辺の制約 cell.contentView.leadingAnchor.constraintEqualToAnchor(dateLabel.leadingAnchor, constant: +8).active = true // 右辺の制約 cell.contentView.trailingAnchor.constraintEqualToAnchor(dateLabel.trailingAnchor, constant: -8).active = true
fuzzball

2016/09/05 13:24 編集

「試したこと」のコードをきちんと見ていなかった為に的外れな回答になっていましたので、回答を一旦削除しました。
fuzzball

2016/09/05 09:44

あらためて回答しました。
P-san

2016/09/06 02:18

設定が反映されるようになりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問