2017-09-22 3 views
0

plus probable que je fais beaucoup de confusion après tant d'heures de travail, mais je ne comprends pas ce qui se passe ...Storyboard Vs Simulator applique aucune contrainte

Sur la photo que je vous montre ci-dessous vous pouvez voir le storyboard lamm. La flèche orange indique que je travaille sur iPhone SE alors que mes simulateurs sont iPhone SE et IPhone 8 plus.

Comme vous pouvez le voir, les deux simulateurs ont deux vues différentes même si j'ai mis des contraintes. enter image description here

enter image description here

UIImageView a un effet de dégradé sur elle, si je prends UIImageView regarder parfaitement sur tous les appareils, même si je travaille sur le story-board Iphone I .. Je ne comprends pas pourquoi cela peut aider moi?

Je vous montre aussi le code UIImageView

- (void)viewDidLoad { 
[super viewDidLoad]; 
CAGradientLayer *gradientMask = [CAGradientLayer layer]; 
gradientMask.frame = _images.bounds; 
gradientMask.colors = @[(id)[UIColor whiteColor].CGColor, 
         (id)[UIColor clearColor].CGColor]; 

_images.layer.mask = gradientMask; 

gradientMask.startPoint = CGPointMake(0.8, 0.0); 
gradientMask.endPoint = CGPointMake(0.8, 0.8); 

gradientMask.colors = @[(id)[UIColor clearColor].CGColor, 
         (id)[UIColor whiteColor].CGColor, 
         (id)[UIColor whiteColor].CGColor, 
         (id)[UIColor clearColor].CGColor]; 
gradientMask.locations = @[@0.0, @0.0, @0.8, @1.0]; 

_images.contentMode = UIViewContentModeScaleAspectFill; 

UIBlurEffect *effect = [UIBlurEffect effectWithStyle:UIBlurEffectStyleLight]; 
UIVisualEffectView *blur = [[UIVisualEffectView alloc] initWithEffect:effect]; 
blur.frame = CGRectMake(_images.frame.origin.x, _images.frame.origin.y, _images.frame.size.width, _images.frame.size.height +50); 
[_images addSubview:blur]; 

[UIView animateWithDuration:.1 animations:^{ 
    blur.alpha = .7; 
}]; 

}

+0

vous devriez montrer aussi les contraintes, semble que ce sont le problème –

+0

Juste moi ou vous venez de régler la hauteur et la largeur au lieu de placer des ancrages sur les côtés? –

+0

@ MilanNosáľ j'ai édité mon poste – kAiN

Répondre

2

Vous appelez:

gradientMask.frame = _images.bounds; 

dans viewDidLoad(). À ce stade, la mise en page automatique n'a pas encore défini toutes les vues, donc votre _images.bounds correspond à ce que vous avez dans votre Storyboard.

Le résultat est que le côté droit de la vue d'image est masqué car le calque de dégradé ne le recouvre pas.

Vous devez soit déplacer la création de masque de gradient/dimensionnement par rapport à un point après auto-mise en page est terminée, ou, ce que je recommande, est le sous-classement UIImageView pour ajouter le masque de gradient là-bas, et l'ont automatique redimensionnez-le en layoutSubviews(). Edit: en guise de remarque, vous ne devriez pas mettre d'animations de vue dans viewDidLoad() - probablement vous ne le verrez même pas.

+0

En fait, le problème était juste cela !! Merci beaucoup ... J'aurais encore besoin d'un peu d'aide avec mon uicollectionview .. les cellules ne répondent pas correctement aux impulsions de mise en page collectionView Flow entre les différents appareils, je pense que c'est toujours un problème de contrainte .. je viens de voir iphone SE Comment puis-je réparer cela? – kAiN

-2

essayer ....

1.Premièrement sélectionner le téléphone u besoin, si u besoin iPhone 8 puis sélectionnez l'iPhone simulateur 8 et au-dessous du MainStoryboard il y a une option pour sélectionner le téléphone puis son orientation sélectionnez la vue iPhone 8. 2.placez l'image dans ViewController 3.puis sur le côté du Xcode sélectionnez l'image puis l'option d'autoresizing sélectionnez la ligne horizontale et verticale (cochez là-dessus).

puis exécutez vous obtiendrez la vue correcte.