2015-05-20 3 views
1

Возникает вопрос: я устанавливаю пользовательский вид с именем ZHLockView. Я положил его в раскадровку, и я установил ограничения. Но я не могу получить правильную ширину в - (id)initWithCoder:(NSCoder *)aDecoder, это всегда 320, что я должен сделать, чтобы получить правильную ширину?iOS8 Ширина UIView 320

Последнее, что я знаю в - (void)layoutSubviews, я могу получить нужную ширину, но она будет проходить дважды. Есть ли лучшая идея?

+0

Что вы имеете в виду под "правильной ширины"? Какую ширину вы ожидаете? Какие ограничения вы установили? – Caleb

+0

Этот вид еще не был выложен в 'initWithCoder:', поэтому у него будет только рамка, которую вы дали в раскадровке. Лучшее место для получения правильной ширины будет зависеть от того, что вы пытаетесь с ней сделать. – dan

+0

Основные ограничения заключаются в том, что ширина равна superView.width. Я хочу получить правильную ширину в разных устройствах. –

ответ

0

Смотрите, вы получаете ширину 320, потому что ваш вид такого размера на раскадровке.

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

Swift: -

CGFloat width = CGRectGetWidth(UIScreen.mainScreen.bounds); 
CGFloat height = CGRectGetHeight(UIScreen.mainScreen.bounds); 

Objective-C: -

CGFloat width = CGRectGetWidth([[UIScreen mainScreen] bounds]); 
CGFloat height = CGRectGetHeight([[UIScreen mainScreen] bounds]); 

Надеюсь, вы поняли, и это поможет вам .. :)

+0

Спасибо, я знаю это. Но если рамка супервизора не является шириной экрана? –

+0

Затем, чего вы хотите достичь в коде? Пожалуйста, поделитесь этим кодом. – Tejvansh

+0

Хорошо, я нашел здесь хороший ответ. Посмотрите .. http://stackoverflow.com/questions/28501903/what-method-is-called-on-uiview-when-its-resized-by-autolayout Hope который решает вашу проблему. Дайте мне знать .. :) – Tejvansh

0

мнение будет нагрузка со значением в xib при первом запуске, затем, когда двигатель автоотключения совершит первый проход, он будет установлен на ew в соответствии с установленными ограничениями.
Зачем вам нужно знать размер? Autolayout сделан, чтобы не заботиться об этом.
-layoutSubviews, -viewWillLayout, -viewDidLayout вызывается, когда движку макета требуется обновление, что может означать разные времена перед отображением вашего представления.

+0

Потому что в файле .m я использую некоторые операторы «для», которые удобны, чем ограничения –

+0

Если вы используете автозапуск, вы ДОЛЖНЫ забыть об изменении кадров вручную, вы должны только изменять ограничения. Даже если он сейчас работает, он должен разрываться между различными незначительными версиями iOS – Andrea

0

код здесь

ObjC

#define KScreenWidth [UIScreen mainScreen].bounds.size.width 
CGFloat height = 0; 
CGFloat margin = (KScreenWidth - columnCount * btnW)/(columnCount + 1); 
for (int i = 0; i < btnCount; i++) { 
    int row = i/columnCount; 
    int column = i % columnCount; 
    CGFloat btnX = margin + column * (btnW + margin); 
    CGFloat btnY = row * (btnW + margin); 
    height = btnH + btnY; 
    ZHButtonView *button = [[ZHButtonView alloc] initWithFrame:CGRectMake(btnX, btnY, btnW, btnH)]; 
    button.userInteractionEnabled = NO; 
    button.currentIndex = i; 
    [button setBackgroundImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal]; 
    [button setBackgroundImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected]; 
    [self addSubview:button]; 
} 
+0

OK, ваш код не имеет отношения к кадру представления. Я думаю, вы можете вызвать его в viewDidLoad. Он должен работать нормально. – Tejvansh

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