2015-12-22 2 views
0

Я создаю представление, которое наследует UIView и добавляет его в superView. Но когда я проверяю рамку представления, я обнаружил, что она была изменена. Но мой код этого не делает. Я не знаю почему. Давайте посмотрим на Кодекс.изменение ширины вида странно

- (void)addBottomView 
{ 
    NSArray *viewArray = [[NSBundle mainBundle] loadNibNamed:@"WYOrderDetailBottomView" owner:nil options:nil]; 
    if (viewArray.count > 0) { 
     self.bottomContentView = viewArray.firstObject; 
    } 

    self.bottomContentView.delegate = self; 
    self.bottomContentView.frame = CGRectMake(0.0f, 0.0f, SCREENWIDTH, 0.0f); 
    MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame)); 
    self.bottomViewHeightConstraint.constant = 0.0f; 
    [self updateViewConstraints]; 
    [self.view layoutIfNeeded]; 
    MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame)); 
    [self.bottomBackView addSubview:self.bottomContentView]; 
    MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame)); 
} 

этот метод вызывается в viewDidLoad, как это, журнал кадра зрения является (0,0,375,0) в iphone6.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.title = @"预约单详情"; 

    self.isNeedRefreshUI = YES; 
    [self addBottomView]; 
    [self configTableView]; 
    [self addNotificationObserver]; 
} 

Но в другом методе, я проверяю кадр view(self.bottomContentView).

- (void)getOrderDetailInfo 
{ 
    MLOG(@"%@", NSStringFromCGRect(self.bottomContentView.frame)); 
} 

кадр меняется на (0, 0, 430, 0), я не пишу код, чтобы изменить это Рамка. Как это работает?

+0

при добавлении подвида в коде, некоторые autolayout ограничений добавляются автоматически. может быть что-то с этим связано. Попробуйте добавить свои собственные ограничения. – ShahiM

+0

Запустили ли вы его в разных разрешениях или только в iphone 6? –

+0

Можете ли вы опубликовать свой метод layoutSubviews? Я думаю, что это создает некоторую проблему – Arun

ответ

2

Если вы используете раскадровку или Xib, автоматическое выключение или константа автоматически устанавливает ваш кадр. вызвать этот метод [self addBottomView]; в viewWillAppear или viewDidAppear установить рамку вручную проверить это

Stackoverflow и Apple Documentation

1

В ограничениях этот метод вызывает просмотр любых обновленных фреймов в представлении для отображения нового представления. Пожалуйста, проверьте это в этом коде.

1

Возможно, у вас есть ограничение ширины в файле xib (или автоматическое определение ограничений маски во время выполнения). Вы можете увидеть это ограничение, напечатав его в консоли, например, вы можете использовать команду: po

po self.view.constraints 

Кроме того, если вы используете autolayout вы не должны изменять рамки представлений напрямую, вы должны изменить только constraint constant значение.

+0

, когда я использую эту команду po, она создает ошибку типа this.error: свойство 'layoutConstraints' не найдено на объекте типа 'UIView *' – huixing

+0

Извините, моя ошибка. Правильное имя свойства - это ограничения. Постскриптум вы должны называть это не только для self.view, также для bottomContentView и для bottomBackView –

+0

Но это также создает ошибку. Я не знаю, почему. результат выглядит следующим образом: (lldb) po self.view.constraints error: свойство 'constraints' не найдено на объекте типа 'UIView *' ошибка: 1 ошибка разбора выражения – huixing

Смежные вопросы