今天升级xcode8 尝试了项目,发现能支持老版本swift 如图设置
tag -> builld Settings
然后会有些ios 10 的可选 ? ! 问题,我的项目中不多30 左右,修改很快,又可以愉快的玩耍了
今天升级xcode8 尝试了项目,发现能支持老版本swift 如图设置
tag -> builld Settings
然后会有些ios 10 的可选 ? ! 问题,我的项目中不多30 左右,修改很快,又可以愉快的玩耍了
|
|
// 保存到本地
|
|
oc 方法
注: UItableView cell 上划线会被 contentView 背景遮住 需要让他得背景透明
有时候觉得这样去画一条线太麻烦不如,add个View 或者layer 啥的, 所以现在扩展UIView 写一个通用的只是添加一个线的函数
|
|
123
// 做到一个聊天背景图时 发现背景图片需要自动大小, 记录下图片拉伸的使用方法// 参数的意思是从宽高的位置指向的一个像素的+1像素进行拉伸 (参数宽高 范围 是保护部分不会被拉伸)image = [image stretchableImageWithLeftCapWidth:image.size.width/2 topCapHeight:image.size.height/2];
iOS中图片(UIImage)拉伸技巧
转: https://my.oschina.net/u/2340880/blog/403996
iOS中图片拉伸技巧与方法总结
一、了解几个图像拉伸的函数和方法
1、直接拉伸法
简单暴力,却是最最常用的方法,直接将图片设置为ImageView的image属性,图片便会随UIImageView对象的大小做自动拉伸。这种拉伸的方法有一个致命的缺陷,它会使图像发生失真与形变。
2、像素点的拉伸
这个函数我们可以用来拉伸类似QQ,微信的聊天气泡背景图,它的两个参数分别leftCapWidth和topCapHeight,这两个参数给定一个坐标,比如:
|
|
这段代码的意思是将图片从左起第2列,上起第2行,坐标为(2,2)的像素点进行复制。将图片进行拉伸。这个方法和上面的方法比起来似乎灵活性更多了,但其也有它的一些局限,如果被拉伸的图片中间也有需要拉伸的像素,这个方法就无能为力了,例如,如下的一张图片,我们需要将其拉伸放大:
3、区域的拉伸
|
|
这个函数需要设置一个UIEdgeInsets参数,UIEdgeInsets结构体如下:
|
|
它分别对用了图片进行拉伸的区域距离顶部、左部、下部、右部的像素。比如,一个1010像素的图片,将UIEdgeInsets参数全部设置为1,则实际拉伸的部分就是中间的88的区域的像素。有一点需要注意,这个方法默认使用的拉伸模式是区域复制,比如还是上面的图案,如下代码拉伸:
|
|
可以明显的看到中间的虚线,这便是区域复制的杰作。
那么问题又来了,如果某些图片中间有渐变,我们该怎么处理了,来看下一个函数。
4、拉伸模式的设置
|
|
这个函数和上一个函数相比,唯一的差别是多了一个参数。这个参数是个枚举,如下:
|
|
现在就明了了,我们只需要设置一下模式,就可以实现渐变拉伸了:
|
|
二、拉伸的用武之地
圆角按钮,空心按钮,渐变的背景,内容可变的标签,聊天气泡等等这样的素材在APP中很可能会多次出现,并且每次出现的尺寸可能还会略微有些差异,如果仅仅依靠美工的素材,恐怕不仅很难达到要求,也会额外增加软件的内存开销,这时,我们使用恰当的拉伸技巧,能使我们的代码更加健壮,APP更加高效。
三、一点小经验
你是否注意观察过最细的线?
看到上面的问句,你可能有些差异。最细的线不就是一像素么?确实,能绘图画出来的最细的实心线确实是一像素,但在一个项目中,我们优秀的美工察觉到无论她把线做的多么细,无论我怎样控制拉伸方法,绘制出的登录框总是没有QQ的细,QQ的框线看起来更加干脆利索。后来索性用绘图画出登录框,结果很不幸,我依然无法将线做到像QQ登录框那样细致。后来偶然试了一种方法,不知原理是否正确,效果总算达到了,当然这也要归功于我们的美工,她将一个图片做的很大,适配最大的分辨率,然后让我手动缩,如此一来,那线就变得非常细。
如果只拉伸左边和右边,中间不变
|
|
转自 :http://www.starming.com/index.php?v=index&view=81
我们组分享会上分享了页面布局的一些写法,中途提到了AutoLayout,会后我决定将很久前挖的一个坑给填起来(还有好多坑就不说了,说了不填更毁形象了)。
可使用的框架首推Masonry,关于为啥选择Masonry看看官方文档就明白了https://github.com/SnapKit/Masonry,官方称AutoLayout所有功能Masonry都支持。这次项目界面方面我就全部使用了Masonry。
AutoLayout的一些基本概念
|
|
multipler属性表示约束值为约束对象的百分比,在Masonry里有对应的multipliedBy函数
|
|
AutoLayout下UILabel设置多行计算需要设置preferredMaxLayoutWidth
|
|
preferredMaxLayoutWidth用来制定最大的宽,一般用在多行的UILabel中
|
|
AutoLayout关于更新的几个方法的区别
Masonry使用注意事项
Masonry适配iOS6和iOS7时需要注意的问题
开发项目时是先在iOS8上调试完成的,测试时发现低版本的系统会发生奔溃的现象,修复后总结问题主要是在equalTo的对象指到了父视图的父视图或者父视图同级的子视图上造成的,所以做约束时如果出现了奔溃问题百分之九十都是因为这个。
Masonry使用范例
基本写法
AutoLayout情况如何计算UITableView的变高高度
主要是UILabel的高度会有变化,所以这里主要是说说label变化时如何处理,设置UILabel的时候注意要设置preferredMaxLayoutWidth这个宽度,还有ContentHuggingPriority为UILayoutPriorityRequried
如果版本支持最低版本为iOS 8以上的话可以直接利用UITableViewAutomaticDimension在tableview的heightForRowAtIndexPath直接返回即可。
但如果需要兼容iOS 8之前版本的话,就要回到老路子上了,主要是用systemLayoutSizeFittingSize来取高。步骤是先在数据model中添加一个height的属性用来缓存高,然后在table view的heightForRowAtIndexPath代理里static一个只初始化一次的Cell实例,然后根据model内容填充数据,最后根据cell的contentView的systemLayoutSizeFittingSize的方法获取到cell的高。具体代码如下
//在model中添加属性缓存高度
@interface DataModel : NSObject
@property (copy, nonatomic) NSString *text;
@property (assign, nonatomic) CGFloat cellHeight; //缓存高度
@end
动画
因为布局约束就是要脱离frame这种表达方式的,可是动画是需要根据这个来执行,这里面就会有些矛盾,不过根据前面说到的布局约束的原理,在某个时刻约束也是会被还原成frame使视图显示,这个时刻可以通过layoutIfNeeded这个方法来进行控制。具体代码如下
参考文章
除非注明,均为Starming星光社原创,微信公共号 starming-weixin 发现更多,转载请注明本文地址:http://www.starming.com/index.php?v=index&view=81
|
|
还有一种通过rootviewController 寻找的
|
|
|
|
|
|
UICollectionViewFlowLayout最大间距设置
|
|
一个左对齐
|
|
设置文本的部分文本的颜色NSMutableAttributedString 样式文本
|
|