Отрегулируйте фрейм UIView после загрузки его из IB - PullRequest
1 голос
/ 24 августа 2011

Обновление: причина проблемы была найдена, см. Ниже.

Я чувствую себя немного смущенным, поскольку ответ на мой вопрос, вероятно, очень прост, но я боролся с этим кускомкод для более чем на один день, и я не могу понять, что происходит, вот так:

Я создал пользовательский подкласс UIView.К настоящему времени я выделил код для части, которая вызывает у меня головную боль:

-(id) initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        self.backgroundColor = [UIColor greenColor];
        self.frame = CGRectMake(0, 0, 320, 60);
        NSLog(@"%@", NSStringFromCGRect(self.frame));
    }
    return self;
}

Этот код вызывается, когда мое пользовательское представление загружается из файла XIB.Этот код пытается изменить размер представления.Это делает это, и оператор NSLog возвращает тот же CGRect, который я передаю представлению.Однако, какое бы значение я ни указывал, высота прямоугольника всегда на 50 пунктов меньше, чем должна быть.

Если я создаю вид программным способом с использованием аналогичного кода, прямоугольник рисуется правильно:

-(id) initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.backgroundColor = [UIColor orangeColor];
        self.frame = CGRectMake(0, 0, 320, 60);
        NSLog(@"%@", NSStringFromCGRect(self.frame));
    }
    return self;
}

Это сводит меня с ума.Что может быть причиной этого?

В качестве дополнительного вопроса, какие методы можно использовать для анализа / визуализации размеров представлений после запуска приложения в симуляторе iPhone?

// Обновление:

Я наконец нашел, что вызвало странное поведение этого подкласса UIView.Контроллер представления, который загрузил это представление как его подпредставление, был загружен из панели вкладок, которая имеет высоту 49 точек, так что это заставило меня задуматься.Очевидно, что параметры автоматического изменения размера по умолчанию, выбранные в конструкторе интерфейса, приводят к изменению размера представления после сброса границ представления в моем методе пользовательского инициализатора.Установка режима автоматического изменения размера в Интерфейсном Разработчике решает проблему.

1 Ответ

2 голосов
/ 11 февраля 2013

Я наконец-то нашел причину странного поведения этого подкласса UIView.Контроллер представления, который загрузил это представление как его подпредставление, был загружен из панели вкладок, которая имеет высоту 49 точек, так что это заставило меня задуматься.Очевидно, что параметры автоматического изменения размера по умолчанию, выбранные в конструкторе интерфейса, приводят к изменению размера представления после сброса границ представления в моем методе пользовательского инициализатора.Установка режима автоматического изменения размера в Интерфейсном Разработчике решает проблему.

...