2013-02-21 4 views
0

Я экспериментирую с контроллером содержимого, но у меня возникают проблемы даже с простейшей формой. В принципе, он отсекает нижние 90 пикселей, и я не уверен, почему.Калибровка встроенного контроллера представления в обрезке iOS 91 пиксель

Я включил свой код и скриншот с аналогичным размером UIView рядом с ним. Этот 90 пиксел clipping согласован для разных размеров (т. Е. Если высота составляет 200 пикселей, то она отображается как 110 пикселей). Любая помощь будет оценена по достоинству, так как это стало очень неприятным. Почему это размер такого размера и как я могу исправить?

ТНХ заранее

- (void)viewDidLoad 
{ 
    // this is the left one below that is the problem 
    [super viewDidLoad]; 
    self.myView=[[JtViewController alloc] initWithNibName:@"JtViewController" bundle:nil]; 
    self.myView.view.frame=CGRectMake(10.0f,10.0f,100.0f,100.0f); 
    self.myView.view.backgroundColor=[UIColor orangeColor]; 
    [self addChildViewController:self.myView];     // 1 
    [self.view addSubview:self.myView.view]; 
    [self.myView didMoveToParentViewController:self.myView];   // 3 


    // this one is ok 
    self.testView=[[UIView alloc] init]; 
    self.testView.frame=CGRectMake(150.0f,10.0f,100.0f,100.0f); 
    self.testView.backgroundColor=[UIColor whiteColor]; 
    [self.view addSubview:self.testView]; 

enter image description here

редактировать 1

Я обновил код, чтобы первые 4 комментария эффективно значения

редактировать 2

@implementation JtViewController 

- (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 from its nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

@end 
+0

Что кадр, содержащий контроллер представления? то есть контроллер представления, чья «viewDidLoad» вы показали. – Ariel

+0

Позвольте мне рассмотреть это; это, вероятно, не то, что я понимаю. Не следует ли addSubview обрабатывать это? – timpone

+0

Я скопировал и вставил ваш код, и у меня получилось голубое представление 200x200. У вас есть какие-либо представления в контроллере, где этот код за исключением полного экрана self.view? – rdelmar

ответ

2

Это общая ошибка границ режима настройки подвид в - (Недействительными) viewDidLoad

- (Недействительными) viewDidLoad; Это исключительно хорошее место для размещения большого количества установочного кода. Но будьте осторожны, потому что геометрия вашего вида (ее границы) еще не установлена. Если вам нужно инициализировать что-то на основе геометрии вида, используйте анимацию - (void) viewWillAppear: (BOOL); метод

- (void) viewWillAppear: (BOOL) анимированный; Когда это вызывается, ваши границы были установлены (через ваш кадр с помощью вашего супервизора или некоторых таких). Возможно, ваше представление будет загружаться только один раз, но оно может появиться и исчезнуть. Так что не помещайте что-то в этот метод, который действительно хочет быть в viewDidLoad. В противном случае вы можете делать что-то слишком многократно. Используйте это, чтобы оптимизировать производительность, ожидая, пока этот метод (т. Е. Перед представлением не появится) начнет дорогостоящую операцию (возможно, придется поместить значок «загрузка»).

Для лучшего понимания, пожалуйста, обратитесь к Stanford lecture и Apple, док Responding to Display-Related Notifications

Так просто переместить настройки подвид рамку на - (Недействительными) viewWillAppear: (BOOL) анимированный; метод

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    self.myView.view.frame=CGRectMake(10.0f,10.0f,100.0f,100.0f); 
} 

P.S Я заметил еще одну ошибку (может быть, это просто опечатка) в строке:

[self.myView didMoveToParentViewController:self.myView]; 

Должно быть:

[self.myView didMoveToParentViewController:self]; 
+0

thx - заголовок в полете теперь так не может проверить, но это звучит разумно – timpone

1

Я использовал Interface Builder.

Таким образом, исправление, казалось, заключалось в том, чтобы удалить окно из содержащегося ViewController и просто добавить UIView и установить его на вид владельца файла. Вероятно, научиться никогда не беспокоиться о UIWindow, но в этом случае вам нужно беспокоиться о UIWindow.