iOS 关于Interface Building 的一些小技巧

  1. Fill Proportionally:按照之前比例填充,可以设置间隙,减去间隙按比例充满。

  2. Fill Spacing:该属性会保持子视图的宽高,所有子视图中间的间隔保持一致。

  3. Fill Center: 该属性是控制所有子视图的中心之间的距离保持一致。

StackViewDemo

场景:动态Tab,可以展示2个也可以三个。在这里插入图片描述

全部代码和布局如下图:

在这里插入图片描述

2. AutoLayout 优先级和动画


在没有UISatckView之前,我们可以利用优先级完成三个Tab删除一个的场景,但是再重新显示是比较困难的。

约束优先级

先看下演示效果:在这里插入图片描述

约束:三个Button等宽等高,均匀分布到屏幕,关键点是Tab3的约束

优先级的作用简单总结一下:一个元素可以同时存在两个相同作用的约束,优先级必须有先后,当其中一个失效,另一个就会使用,这样当我们删除相关元素,可以导致优先级改变。

Tab3的优先级如下:

在这里插入图片描述

代码:

@IBAction func deleteTab2BtnClick(_ sender: Any) {

priorityTab2.removeFromSuperview()

UIView.animate(withDuration: 3, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 15, options: .curveEaseInOut, animations: {

self.view.layoutIfNeeded()

}, completion: nil)

}

伸缩优先级

点击控件我们在size inspector 一栏,最下部可以看到下面优先级。在这里插入图片描述

Content Hugging Priority:表示一个控件“抗拉伸”的优先级。优先级越高,越不容易被拉伸,默认是:251。

Content Compression Resistance Priority:表示一个控件“抗压缩”的优先级。优先级越高,越不容易被压缩,默认是:750。

应用场景

最常见的简单问题,如果我们需要在一行放两个Label,Label宽度自适应。这样就会报错,因为无法确定哪一个Label的宽度撑开的优先级高。

演示Demo:

两个Label约束如下:在这里插入图片描述

在这里插入图片描述在这里插入图片描述

这时候就会报,上文所说的错误,修改一个优先级即可,我们想让Label1拉伸,所有将Label2的抗拉伸优先级调高成252,同理你可以将Label1调成249。

在这里插入图片描述

还没有结束,上述过程是空间充足的情况如果空间不足的话,还会出现报错。在这里插入图片描述

现在我们不希望Label2被压缩,所以同理调高优先级即可。

3. @IBDesignable 和 @IBInspectable 的使用


应用场景:我们使用Xib绑定Custom Class想看一下样子,所见即所得,IBDesignable这个属性即可满足这个需求。

有时候我们想在XIb里直观修改Xib属性,但是Xcode并不全部提供属性修改,可以通过Keypath修改,但是键入太麻烦容易出错,所以可以通过IBInspectable添加自定义属性。

应用Demo:

制作一个可以动态修改Raduis属性,即可显示的Demo。

在这里插入图片描述

import UIKit

@IBDesignable

class LayerView: UIView {

@IBInspectable var myRaduis:CGFloat = 0.0{

didSet{

self.layer.cornerRadius = myRaduis

}

}

}

# 视图复用


1.自定义Xib View复用


Xcode 创建CocoaTouch Class View的时候,不可以自动生成绑定的Xib View。所以需要创建Xib View,然后绑定Custom Class。

step 1:在这里插入图片描述

step 2:新建View Class,并在XIb绑定Custom Class为该类。

step 3:使用该View

2,3步截图使用代码如下:

在这里插入图片描述

if let customView = Bundle.main.loadNibNamed(“CustomView”, owner: self, options: nil)?.first as? CustomView{

customView.frame = CGRect(x: 200, y: 500, width: 200, height: 100)

self.view.addSubview(customView)

}

2.在StoryBoard和Xib中怎么复用Xib文件


上个例子中制作了一个Xib view,但是在项目中往往想更直接在StoryBoard中复用Xib view。直接关联肯定是不行的。

下面介绍下如何在Sb中复用XIb 文件:

接上文例子,我们想在Sb中加上Xib view需要如下步骤,

step 1:绑定Xib 文件的 File’s owner 的Class

在这里插入图片描述

step 2:在 init?(coder: NSCoder)初始化方法中,添加xib视图。

import UIKit

class SbView: UIView {

required init?(coder: NSCoder) {

super.init(coder: coder)

if let sbView = Bundle.main.loadNibNamed(“SbView”, owner: self, options: nil)?.first as? UIView{

sbView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)

self.addSubview(sbView)

}

}

}

step3: 在StoryBoard中,将该视图绑定Class即可。

在这里插入图片描述

# StoryBoard


1.Segue


Segue是一个很简单对象类,继承于NSObject。目的也很简单,主要是Sb VC之间跳转关系的纽带。

基本属性:

| 属性 | 作用 |

| — | — |

| identifier | 字符串标识,区分页面不同Segue |

| source | 跳转之前的控制器 |

| destination | 需要跳转到的控制器 |

传值:

有时候我们需要判断是否满足跳转的条件,可以重写UIViewController shouldPerformSegue代理:

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
[外链图片转存中…(img-3Qv64fEL-1714871350684)]

[外链图片转存中…(img-puU2bNIC-1714871350684)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值