問題:
InterfaceBuilderで作成した画面にaddSubviewしたビューの表示が、3.5インチと4インチで違って見える。
理由:
InterfaceBuilderで作成した画面の属性「Autoresize Subview」がチェックされていると、画面サイズに合わせてサブビューの内容がリサイズされるため。
サンプルコード:
Xcodeで新規プロジェクトをSingleViewApplicationテンプレートで作成。
ベースの画面
1 2 3 4 5 |
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#import "ViewController.h" #import "TestViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. self.view.backgroundColor = [UIColor whiteColor]; TestViewController *testView = [[TestViewController alloc] init]; [self.view addSubview:testView.view]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
ベースに追加する画面
1 2 3 4 5 |
#import <UIKit/UIKit.h> @interface TestViewController : UIViewController @end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#import "TestViewController.h" @interface TestViewController () @end @implementation TestViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = [UIColor orangeColor]; self.view.frame = CGRectMake(50, 50, 100, 100); } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end |
実行結果:
AutoresizeSubviewの値によって、追加されたサブビューのサイズが異なって表示されます。
位置は影響を受けていないようです。
他にも気を付かないといけない属性がありそうだ・・・。
コメントを残す
コメントを投稿するにはログインしてください。