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 ...
随机推荐
- Others-大数据平台Lambda架构浅析(全量计算+增量计算)
大数据平台Lambda架构浅析(全量计算+增量计算) 2016年12月23日 22:50:53 scuter_victor 阅读数:1642 标签: spark大数据lambda 更多 个人分类: 造 ...
- vue 源码阅读记录
0.webpack默认引入的是vue.runtime.common.js,并不是vue.js,功能有略微差别,不影响使用 1.阅读由ts编译后的js: 入口>构造函数 >定义各类方法 &g ...
- Warning:Configuration 'compile' is obsolete and has been replaced with 'implementation'. It will be
1.替换 compile为implementation. 2.file->invalidate caches 或者build中的clear
- java字符串常量池——字符串==比较的一个误区
转自:https://blog.csdn.net/wxz980927155/article/details/81712342 起因 再一次js的json对象的比较中,发现相同内容的json对象使用 ...
- easy.py使用中ValueError: could not convert string to float: svm_options错误问题解决
在使用easy.py中出现如下图所示问题 解决方法: 1.找到cmd = '{0} -svmtrain "{1}" -gnuplot "{2}" "{ ...
- mongodb的优缺点
在这里收集下我自己对Mongodb的一些优缺点方面的认识,或者是通过其它比较可靠的网文上引用或者摘录的作为依据,这个是一个渐进的过程,也是随着我对Mongodb认识的加深而不断扩展的. (1)Mong ...
- python __dict__
dict 以key-value 的形式存储着本对类/模块的: 模块的__dict__ 属性: 存储了模块的 name (这个也是模块的一个单独的键,即:在Bx.py 中引入Ax.py 那么,在Bx中, ...
- mab算法
https://zhuanlan.zhihu.com/p/21388070?refer=resyschina 专治选择困难症——bandit算法 改善:https://zhuanlan.zhihu.c ...
- win10虚拟桌面;一不小心按错了突然只剩下桌面,启动的程序都没了
先说如何关闭虚拟桌面:ctrl+win+F4(万一你还没看到怎么关闭虚拟桌面,就创建并调整到虚拟桌面,会很懵的,因为你启动的所有程序全部都突然消失了,只剩下开机的桌面了): win10有个功能,虚拟桌 ...
- XML 可扩展标记语言
因 为XML实在是太重要了,而且被广泛应用!不论是数据存储,还是其他方面,如配置文件等.XML是一种对独立于任何编程语言的数据进行编码的机制.在数据 交换领域,正在变得非常流行!因为他的基于节点的存储 ...