Рамка uiview для iPad меняется сразу после initWithFrame - PullRequest
1 голос
/ 27 августа 2010

Хорошо, так что у меня есть очень простое приложение с видом на него одной кнопкой.у меня установлен контроллер, чтобы разрешить только пейзаж.Моя проблема в том, что после того, как он инициализирован, а затем я нажимаю кнопку (в которой есть только оператор журнала), он отличается от операторов журнала, которые есть в конце моей инициализации.

Я запускаю приложение в альбомном режиме на симуляторе (хотя на устройстве такие же результаты).Как будто я назначаю его, он просто переключается обратно.Я попробовал это утверждение self.frame = CGRectMake(0, 0, 1024, 768); в моем методе buttonClicked, но он просто исказил и сдвинул его.

- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
    //BUTTONS
    attributesButton = [UIButton buttonWithType:UIButtonTypeCustom];
    attributesButton.frame = CGRectMake(self.frame.size.width - buttonPadding - 35, self.frame.size.height/2 -22 -150, 35, 35);
    [attributesButton setBackgroundImage:[UIImage imageNamed:@"loadIcon.png"] forState:UIControlStateNormal];
    [attributesButton addTarget:self action:@selector(attributesButtonClicked) 
               forControlEvents:UIControlEventTouchUpInside];
    [attributesButton setTitle:@"Attr" forState:UIControlStateNormal];
    [self addSubview:attributesButton];
    NSLog(@"Width: %f",self.frame.size.width);
    NSLog(@"Height: %f",self.frame.size.height);
    }
    return self;
}

-(void)attributesButtonClicked
{
    NSLog(@"Width: %f",self.frame.size.width);
    NSLog(@"Height: %f",self.frame.size.height);
}

Так что это мой init.Извините, это выглядит так ужасно, я не уверен почему.Контроллер моего вида:

    - (void)loadView 
{
    NSLog(@"myViewController: loadView");

    myView = [[myView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];

    self.view = myView;

}

Теперь эта часть, которая получает меня, операторы журнала.

2010-08-27 15:16:55.242 tester[8703:40b] myViewController: loadView
2010-08-27 15:16:55.262 tester[8703:40b] Width: 1024.000000
2010-08-27 15:16:55.262 tester[8703:40b] Height: 768.000000
CLICK MY BUTTON HERE
2010-08-27 15:17:05.689 tester[8703:40b] Width: 748.000000
2010-08-27 15:17:05.689 tester[8703:40b] Height: 1024.000000

Ответы [ 3 ]

1 голос
/ 19 ноября 2010

Из того, что я испытал, похоже, что даже если вы находитесь в ландшафтном режиме, если вы используете авторазмер маски, вам нужно использовать "портретную" рамку при инициализации вашего вида с помощью initWithFrame:

Попытка:

myView = [[myView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)];
0 голосов
/ 27 августа 2010

это, вероятно, потому что представление автоматически изменяет размер родительским представлением, когда вы добавляете его как подпредставление.Если вы не хотите, чтобы это произошло (хотя вы обычно делаете это для полноэкранного просмотра), вы можете установить autoresizingMask в UIViewAutoresizingNone:

- (id)initWithFrame:(CGRect)frame 
{
    if ((self = [super initWithFrame:frame])) 
    {
        ...
        self.autoresizingMask = UIViewAutoresizingNone;
    }
    return self;
}

РЕДАКТИРОВАТЬ: хорошо, извините, я простоПомните, что UIViewAutoresizingNone на самом деле является значением по умолчанию для autoresizingMask, поэтому установка его на это значение во время инициализации фактически ничего не изменит.Но дело в том, что кадр изменяется суперпредставлением, когда вы добавляете свой вид как подпредставление.

0 голосов
/ 27 августа 2010

Если ваше представление привязано к одному из стандартных контроллеров представления (UINavigationController, UITabBarController, ...), контроллер обновит размер кадра во время выполнения, независимо от того, что вы указали в initWithFrame .

На самом деле это хорошо, потому что вам не нужно беспокоиться об ориентации, о том, что панели инструментов занимают место и т. Д.

...