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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

2回答

2832閲覧

xibで作成したViewをStoryboardで利用してもStoryboardの制約が効かない

kuma3

総合スコア60

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

1クリップ

投稿2016/07/11 01:50

編集2016/07/11 01:58

オリジナルのビューをxibで作成してStoryboard上でAutoLayoutを利用して使用していますが画面サイズを変更してもStoryboardに貼り付けた大きさのまま変化がありません。
具体的にはStoryboardではiPhone6の画面サイズで作成しています。ビューに対する制約は上下左右共にVCのビューとの距離を0に指定しています。しかしシミュレータでiPhone6+で起動するとiPhone6のビューの大きさのままで拡大されません。
iPhone6+

下記がオリジナルビューのコードです。
TestView.h

objective

1#import <UIKit/UIKit.h> 2 3@interface TestView : UIView 4 5@end

TestView.m

objective

1#import "TestView.h" 2 3 4@interface TestView () 5 6@property (strong, nonatomic) IBOutlet UIView *contentView; 7 8@end 9 10@implementation TestView 11 12- (id)initWithFrame:(CGRect)frame { 13 self = [super initWithFrame:frame]; 14 if (self) { 15 [self commonInit]; 16 } 17 return self; 18} 19 20- (id)initWithCoder:(NSCoder *)aDecoder { 21 self = [super initWithCoder:aDecoder]; 22 if (self) { 23 [self commonInit]; 24 } 25 return self; 26} 27 28- (void)commonInit { 29 NSString *className = NSStringFromClass([self class]); 30 [[NSBundle mainBundle] loadNibNamed:className owner:self options:0]; 31 NSLog(@"self:%@ ", self); 32 self.contentView.frame = self.bounds; 33 [self addSubview:self.contentView]; 34 35} 36 37@end

xibはFile's OwnerのclassをTestViewにし、xib上のトップレベルビューはcontentViewにしています。

上記のコードを他のカスタムビューでもよく利用していますがうまくいっています。なぜ、急に可変しなくなったのか分かりません。
アドバイスいただけると助かります。
宜しくお願いします。

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

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

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

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

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

fuzzball

2016/07/11 02:33

@property (strong, nonatomic) IBOutlet UIView *contentView; これはどこから引っ張ってきているのでしょうか?
kuma3

2016/07/11 03:00

TestView.xibのトップレベルビューからです。
fuzzball

2016/07/11 06:14 編集

やっぱりそうですよねぇ‥。同じ環境を作ろうとしているのですが、.xibのviewからoutletを張れなくて質問してしまいました。ちょっとxibの勉強してきますw (追伸:張れました。恥ずかしいので原因は書きませんw)
guest

回答2

0

commonInitが呼ばれるタイミングでは、まだAutoLayoutによるリサイズが行われていないのではないでしょうか。

commonInitにNSLogを入れるなりして確認してみてください。もし、self.bounds がXIBの値のままだとしたら、以下の対策が効くと思います。 AutoLayoutによるリサイズが完了した時に自動的に呼ばれるメソッドです。

Objective

1- (void)viewDidLayoutSubviews { 2 self.contentView.frame = self.bounds; 3 [self addSubview:self.contentView]; 4}

これでもまだうまくいかない場合は

Objective

1 [self.view.layer addObserver:self forKeyPath:@"bounds" options:0 context:NULL];

などとして自身のViewのフレームサイズを監視して、observeValueForKeyPath:ofObject:change: が呼ばれたタイミングで行うという手もあります。

投稿2016/07/12 05:06

編集2016/07/12 05:09
YokemuraTakeshi

総合スコア297

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

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

kuma3

2016/07/12 07:10

回答ありがとうございます。 既にうまくいかなかったクラスとxibは削除してしまったため、今からは再現できませんが commonInitにNSLogを入れて内容を確認していましたのでそれについて言いますと NSLogに出力されたviewのframeはxibのものではなくiPhone6のサイズでAutoLayoutが実行された後の値となっていました。
guest

0

あっさりと画面一杯に表示されてしまいました。
参考までに配置と制約のスクリーンショットを付けておきます。

Storyboard

Storyboard

.xib

xib

質問のスクリーンショットでは、Content View=灰色、View=白色、となります。

投稿2016/07/11 04:17

編集2016/07/11 06:18
fuzzball

総合スコア16731

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

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

kuma3

2016/07/11 04:21

回答ありがとうございます。 Storyboard上の配置と制約は私と全く同じだと思います。 でもなぜか私の環境だとAutoLayoutが機能してくれないようです。。
fuzzball

2016/07/11 04:24

表示されている白の矩形は、確かに.xibのview(contentView)でしょうか?色を付けるなどして確認して下さい。
kuma3

2016/07/11 05:35

灰色の矩形がそうです。白の矩形はxibのcontentView上に貼り付けているviewです。
fuzzball

2016/07/11 05:50

「contentViewは画面一杯になるけど、contentViewに乗せているviewが画面一杯にならない」という質問でしょうか?
fuzzball

2016/07/11 06:19

xibの配置/制約のスクショを追加しておきました。
kuma3

2016/07/11 07:01

contentViewが画面に一杯にならないという質問です。contentView上のviewはカスタムビュー上のビューがちゃんとカスタムビューの制約通りに表示されているか確認しているものなので気にしないでください。 スクショありがとうございます。その通りですね。 また、試しに新規プロジェクトを作って全く同じ構成でカスタムビューを作ってみたところ問題なく表示できました。 Xcode上の設定も全く同じなので何がいけないのか。。 新規プロジェクトで作成したカスタムビューを元のプロジェクトで使用することで問題は回避できました。
fuzzball

2016/07/11 07:20

あぁ、スクショの右側/下側に白の余白がありますね。完全に見落としてました‥。 色々聞きたいことがあるんですけど、もういいですか?
kuma3

2016/07/12 07:11

すいません。既にうまくいかなったクラスとxibを削除してしまいました。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問