swift - VFL - 1.循环创建控件 2.metrics使用
1. /// 创建单个热门项目itemView
private func creatProcduceItemView(producrName: String , producePrice: String) -> UIView {
let item = UIView()
item.translatesAutoresizingMaskIntoConstraints = false
let produceLab = JYBaseViewModel.creatLabe(text: producrName, font: UIFont.systemFont(ofSize: 16), textColor: UIColor.init(hexColor: "9B9B9B"))
let priceLab = JYBaseViewModel.creatLabe(text: "¥ " + producePrice.decimalPointCount(), font: UIFont.systemFont(ofSize: 16), textColor: UIColor.init(hexColor: "9B9B9B"))
item.addSubview(produceLab)
item.addSubview(priceLab)
let vd: [String: UIView] = ["produceLab": produceLab ,
"priceLab": priceLab]
item.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|[produceLab]", options: [], metrics: nil, views: vd))
item.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "[priceLab]|", options: [], metrics: nil, views: vd))
item.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[priceLab]|", options: [], metrics: nil, views: vd))
item.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[produceLab]|", options: [], metrics: nil, views: vd))
return item
}
. /// 根据数组创建数量
func setitemsBgViewSubViews(itemsArr : [String]){ //添加之前移除所有 添加的控件
itemsBgView.subviews.forEach({$.removeFromSuperview()}) /// 布局热门项目的view
for (i, _) in itemsArr.enumerated(){ let itemView = self.creatProcduceItemView(producrName: itemsArr[i], producePrice: "38.0")
itemsBgView.addSubview(itemView) let vd: [String: UIView] = ["itemView": itemView]
let metrics: [String: Any] = ["top": CGFloat(i) * ]
itemsBgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "|[itemView]|", options: [], metrics: nil, views: vd))
itemsBgView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-top-[itemView(30)]", options: [], metrics: metrics, views: vd))
if i == itemsArr.count - {
itemView.bottomAnchor.constraint(equalTo: itemsBgView.bottomAnchor).isActive = true
}
}
}
3. 父控件设置约束
self.fastAddConstraints("|-24-[itemsBgView]-24-|", vd) 注意:如果这里父控件是在scrollview 上, 这里宽度要自己设置为屏幕宽度
self.fastAddConstraints("|-24-[itemsBgView(屏幕宽度)]-24-|", vd)

swift - VFL - 1.循环创建控件 2.metrics使用的更多相关文章
- swift 字符转为类,代码创建控件
在使用类之前要先获得 命名空间 通过json来获取 字符型的类名 然后创建类对象,这时候就要用到字符转类 // 从info字典中获取到 命名空间 转为字符型 let NS = NSBundle.mai ...
- (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 ...
- IOS开发-UI学习-UIFont,字体设置及批量创建控件
在IOS 中,使用[UIFont familyNames]这个方法获取72种系统字体. 使用[UIFont fontWithName:@"Zapfino" size:18]这个方法 ...
- 线程间操作无效: 从不是创建控件“txtreceive”的线程访问它。
自己在写串口通信的时候遇到个这样的问题 自己是用vs2010 c#写的错误提示是这样的“线程间操作无效: 从不是创建控件“txtreceive”的线程访问它.” 用的控件是自带的serialPor ...
- 【问题解决】线程间操作无效:从不是创建控件“textBox1”的线程访问它
背景 通过一个辅助线程计算出的一个值赋给textBox1.text: 解决办法 1.直接在窗体的构造函数中添加: System.Windows.Forms.Control.CheckForIllega ...
- 关于“线程间操作无效: 从不是创建控件’textBox1‘的线程访问它”异常的解决方法
线程间操作无效: 从不是创建控件“textBox1”的线程访问它 背景:通过一个辅助线程计算出的一个值赋给textBox1.text;解决办法:1.直接在窗体的构造函数中加:System.Window ...
- 问题解决——基于MSCOMM32.OCX控件的类在客户机不能创建控件
大家不要笑我了,我不喜欢用那个人家写的串口类. 所以导出了MSCOMM32.OCX的类,然后在此基础上写了一个串口打印机的小工具类. -------------声明--------------- 本文 ...
- bug:C#线程间操作无效: 从不是创建控件" XX" 的线程访问它
今天遇到这个问题,百度了下,把解决的方法总结出来.我们在ui线程创建的子线程操作ui控件时,系统提示错误详细信息为:线程间操作无效: 从不是创建控件“XXX”的线程访问它. 就我知道的有三种方法,先看 ...
- 004. 线程间操作无效: 从不是创建控件“textBox1”的线程访问它
最简单的方法(不推荐): 在窗体构造函数中写Control.CheckForIllegalCrossThreadCalls =false; 为什么不推荐上面的方法: 为避免空间造成死锁, .net f ...
随机推荐
- Delphi TQuery 的Locate用法
Help里的解释 function Locate(const KeyFields: String; const KeyValues: Variant; Options: TLocateOptions) ...
- Zabbix实现自动发现端口并监控
1.新建客户端需要的脚本 # vim discovertcpport.sh #!/bin/bash portarray=(`sudo netstat -tnlp|egrep -i "$1&q ...
- Nginx缓存配置以及nginx ngx_cache_purge模块的使用
web缓存位于内容源Web服务器和客户端之间,当用户访问一个URL时,Web缓存服务器会去后端Web源服务器取回要输出的内容,然后,当下一个请求到来时,如果访问的是相同的URL,Web缓存服务器直接输 ...
- avalon2学习教程04显示隐藏处理
今天的主角是ms-visible,它的效果类拟于jQuery的toggle,如果它后面跟着的表达式为真值时则显示它所在的元素,为假值时则隐藏.不过显示不是 display:none这么简单,众所周知, ...
- 在服务器上同时启动多个tomcat
我所用Tomcat服务器都为zip版,非安装版.以两个为例:安装第二个Tomcat完成后,到安装目录下的conf子目录中打开server.xml文件,查找以下三处:(1) 修改http访问端口(默认为 ...
- 【转】WinDbg调试器:启动程序时自动连接调试器方法
当我们调试服务进程或子进程时,无法直接用调试加载进程的方式启动,此时需要在启动程序时自动连接调试器方法: 第一步:注册表展开到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft ...
- 吴裕雄 20-MySQL NULL 值处理
MySQL NULL 值处理我们已经知道 MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作.为了 ...
- Object.keys(obj)--获取对象属性,该方法返回一个数组
find: function(id){ var self = this; var _id = parseInt(id, 10), id = ''; Object.keys(self.data).for ...
- Jenkins 踩过的坑之再总结
在安装完jenkins后,linux中默认使用的jenkins这个用户,这时在构建完项目后我们需要执行一些shell命令时会出现没有权限的情况,导致构建失败,这里我们需要给jenkins用户相应的权限 ...
- jenkins 添加节点问题
没有 Launch agent via Java Web Start 选项 Manage Jenkins > Configure Global Security > TCP port fo ...