废话少说,直接上代码,以及效果图。
1:使用 Safe Area,方便适配 iphoneX 的刘海。
2:我们需要设置 navigationBar 的 背景图片为白色的图片,这样 UIScrollView 就会从导航条下开始布局了。我们用 whiteColor 来画一个背景图,需要给 UIImage 添加一个 category,category 的 h 文件暴露一个 imageWithColor: 方法。
@interface UIImage (Extension)
/*
获取纯色图片
*/
+(UIImage *)imageWithColor:(UIColor*)color;
@end
@implementation UIImage (Extension)
+(UIImage *)imageWithColor:(UIColor*)color{
CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);
UIGraphicsBeginImageContext(rect.size);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, [color CGColor]);
CGContextFillRect(context, rect);
UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return theImage;
}
@end
@implementation SecondViewController
-(void)viewDidLoad {
[super viewDidLoad];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor whiteColor]] forBarMetrics:UIBarMetricsDefault];
}
@end
3: UIScrollView 设置为 light gray color , 加个宽为 5 的蓝色边框;在 UIScrollView 里加上背景颜色为红色的 View。
4:在已经设置好 UIScrollView 的约束前提下来给红色 View 加约束。View 距左右各20,距上10,高度固定110,这样 View 在 UIScrollView 里的 frame 就确定了。这几个约束的优先级要设置为最高,必须满足的硬性要求。
5:View 的 frame 虽已确定,但 UIScrollView 的 contentSize 还没确定。UIScrollView 的 contentSize 是根据其子视图的约束来计算得出的,那么就需要再给 View 添加几个优先级低的约束来控制 UIScrollView 的 contentSize(约束的默认优先级为1000代表最高)。加一个横向不允许滑动的约束,让 View 的 width 比 UISrollView 的 width 小40。加一个纵向允许上滑10的约束,View 是从导航条下开始布局的,所以让 View 的底部距 UIScrollView 的底部443 (617-64-10-110+10)。
6:最终效果:可以以往上滑动10,没法放视频,只能放一张图了。