概要

在iOS开发学习中,UIScrollView是绕不过去的一个重要控件。

但是相对于Android的ScrollView,iOS的这个滚动控件的用法简直是复杂一万倍。。。

最主要是目前能找到的大部分的视频教程看到的关于UIScrollView的教程,都是使用Frame布局。没有找到使用AutoLayout布局的教程。。只有看文字教程学习,然后自己总结一下。

StoryBoard操作布局

在storyboard中,拖入一个UIScrollView,然后打开右侧的show the size inspector,去掉勾选content layout guides,然后设置UIScrollView的上下左右约束为0,然后重新勾选content layout guides

到这里发现Xcode提示约束有错误,原因是是因为UIScrollView的需要有一个ContentView来确定自己的滚动区域。

于是再拖一个UIView到UIScrollView上,然后改名这个UIView为ContentView,鼠标右键拖动这个UIView到UIScrollView的content layout guides上,按住shift勾选前四个约束,让UIScrollView和ContentView四个边建立约束。

然后调整ContentView的约束的constant的值,Xcode默认建立的约束好像不太完美,默认给你自动计算了ContentView的初始大小。

把这个几个调整为0

最好这个几个设置后,发现约束错误的红点依然没有消失。。。点开一看。

说明UIScrollView无法根据宽高确定滚动方向。需要设置一下宽高。因为是移动设备。默认应该是Y轴滚动。

那就设置一下宽等于UIScrollView的宽度。高度设为一个高一点的的值,即可滚动

鼠标右键拖动ContentView到Frame Layout Guides上,然后约束ContentView和Frame Layout Guides宽度一样。

然后单独设置ContentView的高度为1000,就发现约束错误的红点没了,运行程序,白色背景出现滚动条,可以上下滑动滚动了。

使用纯代码布局

思路和使用StoryBoard一样。只是用代码描述出来而已

        let sv = UIScrollView();
sv.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(sv)
sv.backgroundColor = UIColor.systemGray;
sv.topAnchor.constraint(equalTo: self.view.safeAreaLayoutGuide.topAnchor).isActive = true
sv.leadingAnchor.constraint(equalTo: self.view.leadingAnchor).isActive = true
sv.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true
sv.trailingAnchor.constraint(equalTo: self.view.trailingAnchor).isActive = true let contentView = UIView()
contentView.translatesAutoresizingMaskIntoConstraints = false
sv.addSubview(contentView)
contentView.layer.name = "contentView"
contentView.backgroundColor = UIColor.white
contentView.leadingAnchor.constraint(equalTo: sv.contentLayoutGuide.leadingAnchor).isActive = true
contentView.topAnchor.constraint(equalTo: sv.contentLayoutGuide.topAnchor).isActive = true
contentView.trailingAnchor.constraint(equalTo: sv.contentLayoutGuide.trailingAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: sv.bottomAnchor).isActive = true
contentView.widthAnchor.constraint(equalTo: sv.frameLayoutGuide.widthAnchor).isActive = true
contentView.heightAnchor.constraint(equalToConstant: 1000).isActive = true

欢迎关注我的公众号和我交流

IOS开发之UIScrollView约束布局的更多相关文章

  1. iOS开发之 UIScrollView的frame、contentSize、contentOffset和contentInset属性

    ios中下拉图片变大效果 http://blog.csdn.net/mad2man/article/details/14169197 IOS中UIScrollView的frame.contentSiz ...

  2. IOS开发之UIScrollView

    一.UIScrollView的边界处理问题: bounds属性: (1)当bounces属性设置为YES时,当UIScrollView中图片滑动到边界的时候会出现弹动的效果,就像是Linux中的果冻效 ...

  3. IOS开发之UIScrollVIew运用

    UIScrollView可以实现在一个界面看到所有内容,同时也不需要担心所显示的内容超出屏幕的大小,当超出之后可以翻阅至下一页浏览. #pragma mark - UIScrollViewDelega ...

  4. 李洪强iOS开发之iOS好文章收集

    李洪强iOS开发之iOS好文章收集 该文收集朋友们转发或自己的写的技术文章,如果你也有相关的好文章,欢迎留言,当好文章多的时候,我会对这些好文章进行分门别类 文章 简述 日期 直播服务配置 使用 ng ...

  5. 李洪强IOS开发之iOS好项目收集

    李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501 ...

  6. iOS开发之MVVM在项目中的应用

    今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...

  7. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  8. iOS开发之Socket通信实战--Request请求数据包编码模块

    实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...

  9. iOS开发之UISearchBar初探

    iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...

随机推荐

  1. spring学习日志二

    一.spring依赖注入的方式 1.通过set方法来完成注入 <bean id="student" class="com.zhiyou100.xz.spring.S ...

  2. springmvc学习日志三

    一.文件的上传 1.首先在lib中添加相应的jar包 2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名 <body> & ...

  3. 【java虚拟机】jvm调优原则

    转自:https://www.cnblogs.com/xiaopaipai/p/10522794.html 合理规划jvm性能调优 JVM性能调优涉及到方方面面的取舍,往往是牵一发而动全身,需要全盘考 ...

  4. css - rem和vw

    css - rem和vw 物理像素 物理像素在不同的设备中1px里可以容纳的像素颗粒是不相同的,所以1px这个单位其实也是有N个像素颗粒填充的.同一尺寸屏幕的每个像素点所能容纳的像素颗粒越多显示效果越 ...

  5. 初识cookie

    package day01.cookies; import java.io.IOException; import java.net.URLDecoder; import java.net.URLEn ...

  6. springboot全局异常封装案例

    @ControllerAdvice三个场景:>https://www.cnblogs.com/lenve/p/10748453.html 全局异常处理 全局数据绑定 全局数据预处理 首先定义一个 ...

  7. Cookie在哪里看

    更多java学习请进: https://zhangjzm.gitee.io/self_study

  8. openresty HTTP status constants nginx api for lua

    https://github.com/openresty/lua-nginx-module context: init_by_lua, set_by_lua, rewrite_by_lua, acce ...

  9. 学习笔记之IdentityServer4(一)

    快速入门IdentityServer4 概述 将 IdentityServer 添加到 ASP.NET Core 应用程序 配置 IdentityServer 为各种客户发行代币 保护 Web 应用程 ...

  10. Vue CSS模拟菜单点击变色

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...