【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记22 多MVC模式Demo中的AutoLayout自动布局

上一话我们详细介绍了多MVC模式以及Segue过渡的时候,这一话用一个新的Demo来诠释。

我们新建一个Psychologist的工程。把ViewController的名字改为PsychologistViewController。那么这个控制器是做什么用的呢?系统问你一个问题,然后你做出回答,系统会根据你的回答判断你是否开心,这样就能用上我们之前的Hppiness的项目。

在视图中加入一个label,然后调整字体为36,文字居中,label两边上边都与蓝线对齐。

每一话都会渗透一些自动布局的内容。我们让这个label重置到它被推荐的位置。

我们会看到:

中间的蓝线代表label与下边界产生了关联,但是我们不希望这样做,因为你并不确认运行的设备的尺寸。通常我们不去关联下边界,而让下边界的距离做一个弹性的变量。

我们打开右侧的尺寸检测器,可以看到所有的约束:

我可以选中我不喜欢的约束然后delete它。删掉之后会出现黄线,因为我们没有足够的约束了,按照我们之前讲的,在试图大纲中update frame,你会看到黄线消失了。

有了问题,现在我们把答案拖出来,这是一个按钮。我把这个按钮拖到中间,然后点击重置位置到推荐位置(和上面操作一样),然后我们删除不需要的约束,这里我只保留竖直方向的居中,我们不需要上下的间距和固定宽高,因为我希望这个按钮的大小根据它里面的内容来自动调整。

这时我需要使用其他约束了,点击右下角按钮栏的第一个按钮

因为已经有了竖直方向的中心,所以只要添加一个水平方向的居中就行了。

你会看到现在我们的按钮在水平和竖直方向上都居中了。再次update frame,按钮的位置就调整好了。

然后复制按钮,加入不同的内容。

新按钮重置到推荐的位置,你会看到它有两个约束,一个水平居中,一个底部距离:

我们用同样的办法创建第三个按钮:

我们运行一下我们的程序:

你可以看到顶部的文字被截掉了,旋转一下:

看起来横屏模式下效果很好,但是竖屏就不行了,为什么会这样呢?因为我们设置了字体为36号,你可以在storyboard属性监测器的Autoshrink中看到,目前的设置为Fixed

Font Size(固定字体大小):

但是这个字体不需要固定大小,我需要设置它的最小值,不希望它比12号要小,设置如下:

现在我们再来运行,你会看到字体会自动缩放,当屏幕变宽的时候字体会变大。

那么有没有办法可以让文字自动换行呢?一种方法是用textView替换label。另一种方法是设置label中的Line Breaks,当前的做法是删减尾部,最直接的直接设定lines的值。

时间: 2024-07-31 00:35:46

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记22 多MVC模式Demo中的AutoLayout自动布局的相关文章

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记23 多MVC模式Demo的实现

上一话我们对Demo的选择界面做了自动布局的相关处理,现在开始连接多个MVC的操作.首先我们需要其他工程中的文件,那么让我们打开另一个app.点击下面这个文件 然后拖动我们需要的文件到新的工程目录下: 注意勾选第一行,不然只是做了引用,如果你不小心删除了目标目录的话,你就找不到这些文件了,所以还是推荐做复制,这样会把文件复制到我们自己的工程目录下. 那么storyboard中的内容怎么办呢,我们只需要在原工程的storyboard中选中控制器然后复制,粘贴到新工程的storyboard中即可.

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记1 IOS8概述

首先感谢网易公开课和SwiftV课堂的朋友们辛苦翻译,这个系列是我学习斯坦福IOS8公开课的个人心得体会和笔记,希望能给大家带来启发. 首先我们要知道IOS系统中的结构情况,从贴近硬件的底层到贴近用户的顶层,分为四个层次: 1.Core OS层在最下层,很多人可能不知道IOS是一个基于UNIX的操作系统,它大量借鉴了Mac os X 的内核部分,Mac OS X我们肯定不会陌生,命令行的使用很好的证明了它是一个基于UNIX的系统.IOS针对移动设备对电池等硬件进行了系统的优化,但它仍可被看成是一

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记2 Xcode、Auto Layout及MVC

原文链接不知道在哪, 接着上一话来讲,上一话中讲到了MVC,那么MVC在IOS8开发中是如何应用的呢?Paul Hegarty老师给我们展示了一个计算器的Demo,首先新建一个工程,老师把AppDelegate.swift.LaunchScreen.xib和Images.xcassests文件放到了supporting Files文件夹中,那么剩下的两个文件ViewController.swift就是MVC中的C(控制器),Main.storyboard就是MVC中的V(视图). 在Main.s

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记3 Xcode、Auto Layout及MVC

继续上一话中的计算器Demo.上一话讲到类必须被初始化.类中的属性也必须被初始化,所以你不能仅仅声明而不给它一个处置,那么问题来了,我们从storyboard中拖拽的@IBOutlet为什么仅仅有声明而不须要初始化呢,这是由于它的类型依然是一个optional,在你初始化之前已经被赋值为nil了,这也就是为什么你不须要再初始化它的原因. @IBOutlet weak var display: UILabel! 然而既然它是一个optional类型的,那为什么UILabel后面是"!"而

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记31 Multithreading多线程

在IOS中存在着许多队列,和我们数据结构中的队列一样,这里的队列概念也是先进先出的.而每一个方法(包括闭包)都被组织在这些不同的队列中,而每一个队列都有自己的线程去运行这些队列,这就造就了多线程环境. 其中有一个非常重要的队列叫做主队列,主队列是一个串行队列,所以主队列只会一个一个地执行主队列中的函数.所有的UI活动都必须发生在主队列中,所以当你想要一个函数或者是闭包的时候就会执行某些代码,这就会做任何关于UI的事,必须把它放到主队列中,这是保护UI的好办法,主队列绝对不想做任何可能被阻塞的事情

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记17 Deledgation代理

上一话中介绍了扩展和协议的相关知识,这一话我们介绍一个很重要的概念delegation(代理),代理是协议的一个很重要的应用.我们来回顾一下代理的相关知识,它是控制器和试图通讯的关键. 那么代理是如何工作的呢 1.你需要创建一个代理协议,它描述了这个试图要帮别人做的事情. 2.在你的视图中创建一个属性,称作代理或者有时也叫数据源,这个属性的类型就是你创建的代理协议. 3.然后你使用这个属性去处理所有的代理,代理属性会去请求它所需要的数据,记得试图本身是不能拥有数据的.只要是遵循这个协议的对象都可

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记43 保护NSNotification的内存安全

在之前的Demo中讲解过NSNotification的用法,NSNotification是使用NSOperationQueue实现的,所以使用NSNotification不可避免地会陷入内存问题,比如下面这个情况:在storyboard中准备两个场景.在第一个场景中显示一个label,旁边有一个按钮我们可以点击这个按钮modal segue到另外一个场景中,在其中放置一个textField输入新的name,用来修改第一个页面中的label显示,这是一个非常常见的功能.场景的布局如下: 创建两个控

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记13 Drawing绘制、UIColor颜色、Fonts字体

上一话介绍了视图绘制的一些基本原理,这一话继续展开.UIBezierPath可以绘制许多有趣的图形. 使用不同的构造器,比如roundedRect就是四个角被磨圆了的矩形,或者干脆是椭圆和圆.你甚至可以剪切任意的path,剪切使用addClip方法,在剪切了之后你可以针对剪切的这部分进行操作,例如你正在绘制一个卡片,这个卡片有小小的圆角效果,你可以把卡片绘制在一个矩形里面,然后把它剪切到一个小一点的圆角矩阵里,这样四角就修圆了.这是一个获得圆角卡片最简单的方法. 你也可以进行碰撞检测,它基于绕圈

【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记37 TableView Delegate

上一话介绍了tableView的datasource,本话来介绍另一个重要的部分delegate. 当我们点击一个cell的时候,如何跳转到另外一个mvc中呢? 像增加其他segue一样,点击cell按住control键,右键连线到另一个mvc上,然后松手,选择需要的segue类型. 如果你的cell上还有其他按钮,比如detail disclosure,你也可以选择它的segue: 然后设置你的segue: 接着去prepareForSegue中设置这个segue: 每一个case对应不同的i