故事板与模拟器无约束适用

Storyboard Vs Simulator no constraint apply

很可能我在工作了这么多小时后感到很困惑,但我不明白发生了什么......

在下面我给你看的照片中你可以看到故事板 lamm。橙色箭头表示我正在使用 iPhone SE,而我的模拟器是 iPhone SE 和 IPhone 8 plus ..

如您所见,即使我设置了限制条件,这两个模拟器也有两个不同的视图。

UIImageView 有一个渐变效果,如果我让 UIImageView 在所有设备上看起来都很完美,即使我正在制作故事板 Iphone 我 .. 我不明白为什么这对我有帮助?

我也给你看一下 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;
}];

}

您正在呼叫:

gradientMask.frame = _images.bounds;

viewDidLoad() 中。那时,自动布局尚未布局所有视图,因此您的 _images.bounds 与故事板中的内容相匹配。

结果是图像视图的右侧被遮蔽了,因为渐变层没有覆盖它。

您需要在 自动布局完成后将渐变蒙版创建/调整大小移动到一个点 ,或者我建议的是子类化 UIImageView 在那里添加渐变蒙版,并让它在 layoutSubviews().

中自动调整大小

编辑:作为旁注,您不应该在 viewDidLoad() 中放置视图动画 - 很可能您甚至看不到它。

试试这个....

1.first select phone 你需要,如果你需要 iPhone 8 那么 select 模拟器 iPhone 8 及以下MainStoryboard 有一个选项 select phone 它的方向然后 select 视图 iPhone 8. 2.place ViewController 中的图像 3.then 在 Xcode select 图像的一侧,然后是自动调整大小选项 select 水平线和垂直线(打勾)。

然后运行你会得到正确的视图。