iOS UI开发捷径——基础概念理解

本文探讨了使用Interface Builder高效开发iOS UI的方法,包括理解Bundle、nib与XIB的关系,以及如何正确使用File’s Owner、UINib,并介绍了与Auto Layout相关的属性,最后讨论了Storyboard的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近读了《iOS UI开发捷径--利用Interface Builder高效、优雅地开发UI》这本书。感觉受益匪浅,记录下自己在书里面学到的东西。这里只写自己学到的新知识,并不介绍一些简单的IB知识,想要具体学习,请买书自己学习。

和Interface Builder有关的几个重要概念

下面介绍几个和IB有关的概念,学习下平常经常用,但是不了解的概念。

Bundle

这个我们在平常工作中应该经常用,比如创建IB的时候,还有获取资源路径的时候:

let bundle = Bundle.main
复制代码

Bundle有两种表现形式:

  1. 保存可执行代码,比如我们整个App就是一个Bundle,也就是我们经常用的main bundle。
  2. 保存需要的资源。这里的资源包括XIB,Storyboard,图片,声音等,例如我们在使用一些第三方的SDK时用的bundle。

nib

我们创建XIB时,经常调用的方法是loadNibName,为啥是loadNib,而不是loadXIB呢。这里就少说一下XIB和nib的关系了,XIB用Source Code的方式显示可以看到其实他就是个xml文件,那么nib是什么呢,通俗的解释下,nib是工程被编译后,由XIB生成的一种文件类型。这里可以看出XIB和其他资源文件的不同,XIB是需要经过编译的,编译后XIB就不存在了,而在Bundle中生成了与之对应的nib文件,而其他文件只是简单的copy到bundle中。Storyboardc和Storyboard的对应关系和XIB和nib的对应关系是一样的。

使用XIB应该注意的事情

下面看下使用XIB时,应该注意的事情。

File‘s Owner的使用

在XIB文件中,左侧文件排列上,我们可以看到有一个File‘s Owner。从字面上理解,File‘s Owner就是文件的所有者。一般我们的File‘s Owner都是VC。这里为什么介绍File‘s Owner,是因为一个XIB可以同时和UIView和UIViewController进行连线,这里依靠的就是File‘s Owner。例如,一个XIB文件中,一个view即可以和File‘s Owner连线也可以和自己的view文件连线,这样就可以在view中处理一些view的逻辑,在VC中处理业务逻辑了。使用File‘s Owner时还应该注意的地方是,当创建XIB时,调用的函数:

func loadNibNamed(_ name: String, owner: Any?, options: [AnyHashable : Any]? = nil)
复制代码

这里的owner参数,我们经常传入nil,这里要说下这个参数具体情况下应该传入什么,

  1. 当XIB没有设置File‘s Owner那么这里传入nil
  2. 当XIB设置File‘s Owner并且对应类就是使用XIB的这个类,这里可以传入self或者nil
  3. 当XIB设置的File‘s Owner不是当前使用该XIB文件的类,这里就必须传入与File‘s Owner相对应的类。

UINib的使用

加载XIB文件的方式有以下两种:

  1. func loadNibNamed(_ name: String, owner: Any?, options: [AnyHashable : Any]? = nil)
  2. open func instantiate(withOwner ownerOrNil: Any?, options optionsOrNil: [AnyHashable : Any]? = nil) -> [Any] 这两种方法有啥不同的呢,第一种是频繁的加载XIB文件,第二种是利用UINib把XIB文件加载到内存中,然后从内存中加载。所以当我们需要频繁使用XIB文件时要用第二种,但只用一次时,应该用第一种。

UIViewController和XIB的使用

当我们创建VC时如果没有勾选also create XIB,后面又想使用XIB,我们就应该手动创建XIB,然后进行关联,关联的时候,我们需要把view和VC的view属性进行连线,否则程序会crash。

XIB和AutoLayout

这里不具体介绍AutoLayout,只介绍几个属性,新学到的。

Content Compression Resistance

这个属性是指一个视图保护其内容完整性的能力,系数越大,该视图保护内容完整性越强,内容越不容易被压缩或者裁剪。

Content Hugging

这个属性是指一个视图保护它的尺寸与其内容尺寸相匹配的能力,系数越大,匹配能力越强。

在XIB中ScrollView使用AutoLayout

ScrollView使用AutoLayout和其他view不同,我们需要设置它的子view大小明确,因为ScrollView需要计算自己的contentSize。所以原则是他的子view的约束需要可以推算出ScrollView的contentSize。

Storyboard使用

Storyboard平常的使用和XIB差不多,但是Storyboard比XIB多了Extra View,segue和object的使用,这里我们主要介绍extra view,segue和object的使用。

Extra View

我们通常会有这样的需求,一个VC在特定的情况下或者固定的操作后显示一个View,比如,没有网络的时候的提示页面。SB允许在Scene中添加Extra View来完成这些事情。下面介绍如何使用。我们拖一个View到First Responder和exit中间,如图所示:

然后在这个View上面添加无网络时展示的控件,添加的控件可以直接拖到VC中进行连线,还可以和自定义的UIView类进行关联,封装使用。我们将这个View和VC进行连线,然后在VC中添加入下代码:

class ViewController: UIViewController {

    @IBOutlet weak var reachabilityView: UIView!
    override func viewDidLoad() {
        super.viewDidLoad()
        let noReachability = true
        if noReachability {
            reachabilityView.center = view.center
            self.view.addSubview(reachabilityView)
        }
    }
}
复制代码

预告

Segue、Storyboard reference、Object其实可以单独写篇文章,这里先暂时不介绍了,等写完文章附上地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值