2015-07-16 3 views
0

У меня есть изображение, ширина = 189, высота = 41, поэтому я определил 2 ограничения для этого UIImageView как это:Как установить множитель для UIImageView

NSArray *constraint_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:[Title(41)]" options:0 metrics:nil views:viewsDictionary]; 
[imgVwLogo addConstraints:constraint_V]; 

NSArray *constraint_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:[Title(189)]" options:0 metrics:nil views:viewsDictionary]; 
[imgVwLogo addConstraints:constraint_H]; 

Он хорошо выглядит на iPhone 4s, но когда это касается iPhone 6 плюс я чувствую, что высота UIImageview должна быть немного увеличена, потому что изображение выглядит сжатым по вертикали. Возможно, добавление множителя может быть решением. Но я не знаю, как выбрать множитель для моих элементов. Я его как высота/ширина

NSLayoutConstraint *imgtitlecon_Aspect_Ratio =[NSLayoutConstraint 
              constraintWithItem:imgVwLogo 
              attribute:NSLayoutAttributeHeight 
              relatedBy:NSLayoutRelationEqual 
              toItem:imgVwLogo 
              attribute:NSLayoutAttributeHeight 
              multiplier:41/189 
              constant:0.0f]; 
[imgVwLogo addConstraint:imgtitlecon_Aspect_Ratio]; 

, но это делает, что UIImageView полностью исчезают даже на 4s. Как я могу решить эту проблему?

UPDATE

//------------------------ Title image -------------------------------------------- 

NSArray *constraint_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V: [Title(41)]" options:0 metrics:nil views:viewsDictionary]; 
[imgVwLogo addConstraints:constraint_V]; 

NSArray *constraint_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:[Title(189)]" options:0 metrics:nil views:viewsDictionary]; 
[imgVwLogo addConstraints:constraint_H]; 


// Center Horizontally 
NSLayoutConstraint *centerXConstraintimgTitle = 
[NSLayoutConstraint constraintWithItem:imgVwLogo 
          attribute:NSLayoutAttributeCenterX 
          relatedBy:NSLayoutRelationEqual 
           toItem:self.view 
          attribute:NSLayoutAttributeCenterX 
          multiplier:1.0 
           constant:0.0]; 
[self.view addConstraint:centerXConstraintimgTitle]; 


NSLayoutConstraint *imgtitlecon_Aspect_Ratio =[NSLayoutConstraint 
              constraintWithItem:imgVwLogo 
              attribute:NSLayoutAttributeHeight 
              relatedBy:NSLayoutRelationEqual 
              toItem:imgVwLogo 
              attribute:NSLayoutAttributeHeight 
              multiplier:(41.0f/189.0f) 
              constant:0.0f]; 
[imgVwLogo addConstraint:imgtitlecon_Aspect_Ratio]; 




NSArray *Titleconstraint_POS_H=[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-titleVspace-[Title]-titleVspace-|" options:0 metrics:metrics views:viewsDictionary]; 
[self.view addConstraints:Titleconstraint_POS_H]; 



//------------------------ Title image ------------------------------------------------------------ 

и, наконец, я выравнивают мои все элементы

NSArray *btncon_POS_V=[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-50-[Title]-0-[vwgap]-0-[lblFirst]-0-[lblSecond]-20-[textusername]-10-[txtpassword]-20-[btnLogin]-0-[vwgapCopy]-0-[copyrightlbl]" options:0 metrics:nil views:viewsDictionary]; 

[self.view addConstraints:btncon_POS_V]; 
+0

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

+0

см. мой обновленный ответ. –

+0

см. Мой обновленный код и примечания в ответе. –

ответ

0

Если вы просто хотите установить пропорции от кода, то вам просто нужно изменить небольшую вещь в ваш код. Вот оно.

[imgVwLogo addConstraint:[NSLayoutConstraint 
             constraintWithItem:imgVwLogo 
             attribute:NSLayoutAttributeHeight 
             relatedBy:NSLayoutRelationEqual 
             toItem:imgVwLogo 
             attribute:NSLayoutAttributeWidth 
             multiplier:(41.0f/189.0f) 
             constant:0.0f]]; 

РЕДАКТИРОВАТЬ 1: в соответствии с вопросом отредактировать ответ будет как указано ниже. EDIT 2: измените значение 568.0f на значение высоты self.view во время проектирования в раскадровке.

[imgVwLogo addConstraint:[NSLayoutConstraint 
             constraintWithItem:imgVwLogo 
             attribute:NSLayoutAttributeHeight 
             relatedBy:NSLayoutRelationEqual 
             toItem:imgVwLogo 
             attribute:NSLayoutAttributeWidth 
             multiplier:(41.0f/189.0f) 
             constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint 
             constraintWithItem:imgVwLogo 
             attribute:NSLayoutAttributeWidth 
             relatedBy:NSLayoutRelationEqual 
             toItem:self.view 
             attribute:NSLayoutAttributeHeight 
             multiplier:(189.0f/568.0f) 
             constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint 
             constraintWithItem:imgVwLogo 
             attribute:NSLayoutAttributeCenterX 
             relatedBy:NSLayoutRelationEqual 
             toItem:self.view 
             attribute:NSLayoutAttributeCenterX 
             multiplier:1.0f 
             constant:0.0f]]; 
[self.view addConstraint:[NSLayoutConstraint 
             constraintWithItem:imgVwLogo 
             attribute:NSLayoutAttributeTop 
             relatedBy:NSLayoutRelationEqual 
             toItem:self.view 
             attribute:NSLayoutAttributeTop 
             multiplier:1.0f 
             constant:50.0f]]; 
+0

Я поставил вот так. Но все же он исчезает с экрана. Нужно ли мне устанавливать какие-либо другие вещи? – IRD

+0

Как выбрать правильное значение множителя для моего UIImageview – IRD

+0

, применяя только одно ограничение, недостаточно ... отредактируйте свой вопрос с помощью примерного проекта в github, и я применим ограничение к тому, что вам нужно. –

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