ipad air2怎样条横屏上的简书怎样横屏

竖屏iOS应用中强制部分页面横屏的方法 - 简书
竖屏iOS应用中强制部分页面横屏的方法
今天在使用B站的ijkmedia做视屏播放的功能,视频播放的那个页面我想强制让他横屏。当前的应用本来是一个竖屏应用。查了各种网站方法很多种,但是很多都有各种问题,不符合当前的场景。最终找到了一个解决办法。
1 UINavagationController
由于当前的屏幕状态是通过UINavagationController来控制的,所以我们首先需要自定义一个UINavagationController:
@implementation XddBaseNavagationVC
- (BOOL)shouldAutorotate
return [self.viewControllers.lastObject shouldAutorotate];
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return [self.viewControllers.lastObject supportedInterfaceOrientations];
这么做是为了当从横屏页面返回之后,能够让页面保持竖屏(其实是去获取返回之后VC的屏幕状态)。
2 UITabBarViewController
因为当前的应用是一个tabbar应用,所以我们也需要保证tabbar能够正常的显示。我使用了一个分类来处理这个问题,tabbarvc的状态依赖当前选中的VC的属性:
@implementation LCTabBarController (Autorotate)
- (BOOL)shouldAutorotate
return [self.selectedViewController shouldAutorotate];
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return [self.selectedViewController supportedInterfaceOrientations];
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return [self.selectedViewController preferredInterfaceOrientationForPresentation];
然后在我的整个应用中,BaseVC是所有的VC的基类,通过这个我统一的处理了一些问题,因为当前的应用是竖屏的,所以在BaseVC中实现如下几个函数,保证VC竖屏显示:
// 只支持竖屏
- (BOOL)shouldAutorotate {
return NO;
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
return UIInterfaceOrientationMaskP
-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation
return UIInterfaceOrientationP
4 横屏VC的处理
我的横屏的VC也是继承了BaseVC,如果不处理,也会竖屏。通过以下代码进行特殊处理,覆盖BaseVC中的几个方法:
- (BOOL)shouldAutorotate {
return YES;
- (UIInterfaceOrientationMask) supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeR
- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation {
return UIInterfaceOrientationLandscapeR
这样就能让他正确的横屏显示,并且返回回去仍然是竖屏。
当在弹出横屏的VC的时候一定要注意以下几点:
当前的方式只支持模态弹出。push是会出问题的。
2.弹出方法,必须要用XddBaseNavagationVC进行包装才可以使用,否则会导致返回之后竖屏的页面变成横屏。
UINavigationController *nav = [[XddBaseNavagationVC alloc]initWithRootViewController:[[IJKVideoViewController alloc] initWithURL:url]];
[viewController presentViewController:nav animated:YES completion:completion];
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
TimLiu-iOS Swift版本点击这里欢迎加入交QQ流群:
github排名 https://github.com/trending,github搜索:https://github.com/search 使用方法:根据目录关键字搜索,记得包含@,...
github排名:https://github.com/trending, github搜索:https://github.com/search. 此文章转自github:https://github.com/Tim9Liu9/TimLiu-iOS git-recipesG...
经历了漫长冬天的等待,终于等到你——春。
像朱自清先生散文里写到:盼望着,盼望着,东风来了,春天的脚步近了…… 每个人在经历了寒冷寂寥的冬季,都盼望着盎然春天的到来。
春天来了,大地苏醒了,小草又发出绿绿的新芽,鸟儿在树上不停的呢喃。春天来了,大雁从遥...
花开亦有痕
第一部分 克服天性中的选择弱势 选择太多怎么办? 1.1.1管理学和心理学大师詹姆斯·马奇认为,我们一般人在做抉择时,只是粗略地审查易得的、显然的选项,一旦找到合格的选项后就停止对其他选项的探寻,也就是面对一个决议,有1到8共八个选项,假设其中只有选项3和5合适,并且5比3...
童年,有条母亲的河,水意柔软,娇韵得体,小鱼儿活络其中,母亲在拿她的身体为孩子提供氧气, 我是你身体的一半一半,你用青春交换,用身躯撑起,我童年全部的勇气。我的青春是你给了我,你告诉我被窝是青春的坟墓,青春是用来奋斗的,不是造作的。我很庆幸有你,也感谢有你,是你,在我走不动...
胡思乱想,感觉自己生大病了,我是真的病了吗?iOS中如何设置手机横屏进入App首屏保持竖屏 - 简书
iOS中如何设置手机横屏进入App首屏保持竖屏
在平时开发中,我们经常会忽略一个问题,就是当我们的App内有需要横屏的页面,而首页只支持竖屏,在plus的设备上,桌面是运行横屏的,此时进入App,首页布局会出错。在延伸一下这个问题,当我们开发一款支持iPad的App时,如何保证App在任何情况下进入首页都保持竖屏状态?
我们可以这样设置首页的控制器:
// 必须两个都是 .portrait才可以
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return .portrait
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return .portrait
如果有UITabBarController,这样设置:
// 必须两个都是 .portrait才可以
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return selectedViewController?.supportedInterfaceOrientations ?? .portrait
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return selectedViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
如果有 UINavigationController,这样设置:
// 必须两个都是 .portrait才可以保证首页一定是竖屏
override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
return topViewController?.supportedInterfaceOrientations ?? .portrait
override var preferredInterfaceOrientationForPresentation: UIInterfaceOrientation {
return topViewController?.preferredInterfaceOrientationForPresentation ?? .portrait
设置一个全局的变量
var isAllowLandscape: Bool = false
在AppDelegate中设置:
// 控制整个App所允许旋转的方向
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -& UIInterfaceOrientationMask {
return isAllowLandscape ? .allButUpsideDown : .portrait
在需要的时候改变 isAllowLandscape的值即可。
一个专注的,技能树乱点的,iOS工程师!
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
很多时候,项目中都有这样的需求:APP中以竖屏为主,个别界面会要求横屏显示,或者要根据用户的手机朝向自动切换横竖屏;下面就来详细讲解,在项目中怎么使用代码来控制APP的界面转换.首先,要想APP支持多个方向,需要在工程进行设置支持的朝向:在General--&Deploym...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
平板单元向来是高端旗舰级别耳机的配置,先不说素质到底如何,其定位想来也并不是拿来打游戏的。所以在I-ROCKS平板振膜电竞耳机刚刚登场的时候,几乎所有的声音都集中在“为什么平板耳机还会有电竞版本”的问题上。 不过打游戏的耳机未必只打游戏,听歌的耳机未必始终听歌,虽然电竞耳机...
11.12 昨天,14个人来帮忙,终于,房子顶棚快起来了。技术上没什么好说的,这种房子很简单,只要盖过一次的人都会。各种木料计算好,从建材超市里买回来。主要的建筑工具是钉枪和和电锯。纯粹像拼积木一样把它拼起来。到现在为止,一包水泥、一块砖头都还没用,可能将来厨房和卫生间里装...
1. 微信的各种规定非常严格,是因为在大平台上,小的疏忽能通过蝴蝶效应造成很大规模的影响,量级非常可怕。 2. 许多人希望微信能给出一个清晰明确的规定,我们也很困扰,因为这个规则是在不断变化的,我们也给不出特别清晰明确的规则。今天我来分享下关于微信的底层思考,通过这些基础的...
1. 初看到《深度工作》这种书名我是拒绝的,按二土的话来吐槽,现在是刮起了“深度风”吗,各种“深度学习”以外,又出现了“深度工作”。 论文风的内容看下来也不含糊。 推荐直接看第二部分的准则。 整本书的重点是:你需要远离社交网络媒体,给自己一个可独处的安静思考和想法的时间去做...
谧的静,趋于丰美的夜, 全新着包围,城市,一座座 陷入水色朦胧,灯塔的尖,光闪闪着亮 死亡乐器,灌满水银 满天星星,小小多面体水晶, 集结着,浩大一场游行。柔蓝色 光的尾巴,在黑色模糊的屋脊上, 炫舞着弹跳,滑翔交织在变, 幻的灵,万箭齐发。 发不出佛的手心。 淡紫色的风,...iOS 部分界面强制横屏与强制竖屏 - 简书
iOS 部分界面强制横屏与强制竖屏
强制横屏(此方法为旋转视图)
- (void)loadView{
self.view = [[UIView alloc]init];
CGRect frame = [UIScreen mainScreen].
AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].
UIDeviceOrientation duration = [[UIDevice currentDevice]orientation];
if (duration == UIDeviceOrientationLandscapeLeft) {
app.window.transform = CGAffineTransformMakeRotation(M_PI*0.5);
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeLeft animated:YES];
app.window.transform = CGAffineTransformMakeRotation(M_PI*1.5);
[[UIApplication sharedApplication] setStatusBarOrientation:UIDeviceOrientationLandscapeRight animated:YES];
app.window.bounds = CGRectMake(0, 0, frame.size.height, frame.size.width);
app.window.transform = CGAffineTransformI
部分代码网址:https://github.com/CCSH
参考外文学习并使用Auto Layout,顺便翻译记录一下。 原文 Beginning Auto Layout Tutorial in iOS 7: Part 1 @Matthijs Hollemans on October 16, 2013 Beginning Auto ...
[转] 糖箔糊 文章索引 1.1 为iOS而设计(Designing for iOS) 1.1.1 以内容为核心(Defer to Content) 1.1.2 保证清晰度(Provide Clarity) 1.1.3 用深度来体现层次(Use Dept...
很多时候,项目中都有这样的需求:APP中以竖屏为主,个别界面会要求横屏显示,或者要根据用户的手机朝向自动切换横竖屏;下面就来详细讲解,在项目中怎么使用代码来控制APP的界面转换.首先,要想APP支持多个方向,需要在工程进行设置支持的朝向:在General--&Deploym...
最近在项目中有个这样的需求:整个APP中界面也竖屏为主,且不能自动横竖屏切换,在线学习视频播放界面可以根据手机的方向横竖屏切换;其实实现起来也并不难,关于视图是否能旋转主要还是有没有设置支持,在工程的General--&Device Orientation里可以进行这些设置...
概述 视图控制器管理着构成应用程序用户界面中的一部分视图,其负责加载和处理这些视图,管理与这些视图的交互,并协调视图对其展示的数据内容的变更作出响应。视图控制器还能与其他视图控制器对象协调工作,帮助管理应用程序的整体界面。 视图控制器的主要职责包括以下内容: 更新视图的内容...
五月的贵州,适逢当地的“栽秧雨”季节。我们却不识时节,在这个时候来到了位于从江县的加榜梯田。天空阴暗,细雨飘飘,湿气弥漫,当地苗族村民正在梯田上忙于栽秧。我们在此采撷了一组风光照片。
日,闺蜜闪婚了。闪婚的理由,并不是觉得遇到了生命中的最爱的那个人,而是接受了父母的安排和一个自己到结婚时候都不喜欢的男子结婚了。现在回想闺蜜从定日子、准备婚礼等等所有流程也就一个月的时间。尤记得上个月月底,我们还和她及她的男友(现在应该叫前男友)一起开心逛公...
这篇文章是图片响应式解决方案的子文章,属于实验性质。 这篇文章将解决两个问题: 浏览器是否是根据w值来选择图片的,是如何选择的? 如果w值与图片真实宽度不一致,又会出现哪些问题? 最开始的时候我是理解w标志代表可渲染的位图宽度的,那么是这样么?做个测试我将test-480....
相遇,如雨后的空气中的花香,让人沉醉,到现在也难以忘怀。 原本以为,可以彼此熟悉,让我分享你的故事,然后把我的故事分享给你,就这样,,我们认识了。每天,总是在相互倾诉,后来,我知道你刚刚分手。看到你的无助,我很想给你一个肩膀,可惜,我只能说一些安慰的话,其实,我也刚分手。 ...
今天被领导批评,写的意向书太过口语化,口气太过生硬。开始觉得没人什么,但后来想想不太对,一篇文章既要口语化又要生硬真是挺难的,我是怎么做到的呢?当然,我完全不敢质疑领导对我的评价,只能乖乖的按领导意思修改去了。
自从年纪大了以后,我一直喜欢平铺直叙的语言,对...单独某个界面横屏显示 - 简书
单独某个界面横屏显示
AppDelegate中代码
- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
if (_allowRotation == 1) {
return UIInterfaceOrientationMaskAllButUpsideD
return (UIInterfaceOrientationMaskPortrait);
// 支持设备自动旋转
- (BOOL)shouldAutorotate{
if (_allowRotation == 1) {
return YES;
return NO;
在想要旋转的ViewController中写入
AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].
appDelegate.allowRotation = 1;
在ViewController消失的时候设置
AppDelegate * appDelegate = (AppDelegate *)[UIApplication sharedApplication].
appDelegate.allowRotation = 0;
屏幕旋转监听方法
在特别的场景下,需要针对屏幕旋转作特殊处理。在系统下实现相关的功能还是比较方便的。
1.注册UIApplicationDidChangeStatusBarOrientationNotification通知(举例:在一个viewcontroller类的viewdidload中注册该通知),示例代码如下
注意这种方式监听的是StatusBar也就是状态栏的方向,所以这个是跟你的布局有关的,你的布局转了,才会接到这个通知,而不是设备旋转的通知。当我们关注的东西和布局相关而不是纯粹设备旋转,我们使用上面的代码作为实现方案比较适合。
[[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(statusBarOrientationChange:) name:UIApplicationDidChangeStatusBarOrientationNotificationobject:nil];
- (void)statusBarOrientationChange:(NSNotification *)notification
UIInterfaceOrientation orientation = [[UIApplicationsharedApplication] statusBarOrientation];
if (orientation == UIInterfaceOrientationLandscapeRight) // home键靠右
orientation ==UIInterfaceOrientationLandscapeLeft) // home键靠左
if (orientation == UIInterfaceOrientationPortrait)
if (orientation == UIInterfaceOrientationPortraitUpsideDown)
2.注册UIDeviceOrientationDidChangeNotification通知(举例:我们同样在一个viewcontroller类的viewdidload中注册该通知),示例代码如下:
注意到这种方式里面的方向还包括朝上或者朝下,很容易看出这个完全是根据设备自身的物理方向得来的,当我们关注的只是物理朝向时,我们通常需要注册该通知 来解决问题(另外还有一个加速计的api,可以实现类似的功能,该api较底层,在上面两个方法能够解决问题的情况下建议不要用,使用不当性能损耗非常 大)。
[[NSNotificationCenter defaultCenter] addObserver:selfselector:@selector(orientChange:) name:UIDeviceOrientationDidChangeNotificationobject:nil];
- (void)orientChange:(NSNotification *)noti
NSDictionary* ntfDict = [noti userInfo];
UIDeviceOrientation
orient = [UIDevicecurrentDevice].
UIDeviceOrientationUnknown,
UIDeviceOrientationPortrait,
// Device oriented vertically, home button on the bottom
UIDeviceOrientationPortraitUpsideDown,
// Device oriented vertically, home button on the top
UIDeviceOrientationLandscapeLeft,
// Device oriented horizontally, home button on the right
UIDeviceOrientationLandscapeRight,
// Device oriented horizontally, home button on the left
UIDeviceOrientationFaceUp,
// Device oriented flat, face up
UIDeviceOrientationFaceDown
// Device oriented flat, face down
switch (orient)
caseUIDeviceOrientationPortrait:
caseUIDeviceOrientationLandscapeLeft:
caseUIDeviceOrientationPortraitUpsideDown:
caseUIDeviceOrientationLandscapeRight:
原文链接http://www.cnblogs.com/kenshincui/p/4186022.html 音频在iOS中音频播放从形式上可以分为音效播放和音乐播放。前者主要指的是一些短音频播放,通常作为点缀音频,对于这类音频不需要进行进度、循环等控制。后者指的是一些较长的音...
发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注
09:45字数 61697阅读 3316评论 2喜欢 85 用到的组件 1、通过CocoaPods安装 项目名称 项目信息 AFNetworking 网络请求组件 FM...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
培训的职责 1.酒店一般要求任何管理人员都负有为员工提供培训的责任,以促进其业务知识和技能的提高,使其工作达到并超越标准。 2.员工参加任何类型培训都要守时并完成所有的培训环节。未事先说明而无故不参加培训的人员会受到适当的纪律处罚。 培训部门的角色和职责 1、设计、指导、控...
读李笑来《人人都能用英语》 你给自己太多限制了。关于用英语,你只要做一件事,扔掉这么多年考试给你带来的习惯。你不用提前背单词,因为你可以随时查字典翻书;你不用提前苦练发音和语法,因为大部分人只是用英语来阅读,哑巴英语也无妨,就算你用中式英文别人也能大概懂你的意思。 李笑来老...
客户在忙时,不能打扰,进门要扣门, 微笑做好打招呼,了解客户,为他们服务,推荐产品,加微信关注,走时也打招呼告别 和他们开玩笑,聊天,做朋友, 如何和他们不紧张说话,愉快地聊天是要锻练的, 方案:多与陌生人说话,聊天
坚持和努力,往往用来形容一个有为青年有多么上进。但正如李笑来所说,如果一件事情,你需要去坚持和努力,那这个事情估计不成的概率比较大。因为这意味着你不情愿去做呀。不情愿才需要坚持。如果你超级喜欢,拉都拉不住,又谈什么坚持,恨不得没日没夜的干。 家离公司不太远,6公里左右,是比...
成功是每一个人都渴望的,所有人都想把事情做成,而没有想把事情做失败的。 但是成功往往并不是那么容易得到,所以才令人向往。 在通往成功的路上,总会遇到各种挫折和挑战,怎么样才能够加快成功速度呢? 首先,我们来看一下成功的对立面:失败。 失败就是,想做一件事情,但是迟迟没有达成...iOS横屏和竖屏布局不同的实现方案浅析 - 简书
iOS横屏和竖屏布局不同的实现方案浅析
横屏和竖屏布局不同的实现方案浅析
最近在开发中碰到了需要兼容横竖屏的布局需求,由于要兼容iOS7且要适配目前所有的iOS尺寸,刚开始思路也不怎么明朗。在尝试了好几种不同的实现方案后,磕磕绊绊,最后终于实现了业务需求。这里主要跟大家分享一下横竖屏布局方案的几种思路。
0x01 简单的横竖屏布局,约束搞定
这是一种比较简单的情形,虽然横屏和竖屏看上去不太一样,但界面中元素的相对布局没有变化,比如横屏中A元素和B元素是上下布局,竖屏中A元素和B元素也是上下布局。这种情形下,为了适配不同尺寸的iOS设备,使用Autolayout来布局比较合适。 如下图1和图2是个一个典型的业务场景;
不管是横屏和竖屏状态下,中间的灰色按钮居中,最下面的红色文本靠底部是一个固定的距离,这两个元素的约束非常容易添加。稍麻烦的是上面的文蓝色本元素,要去不管是横屏还是竖屏状态下,均位于按钮顶部和Top Layout Guide中间。这里我们可以再添加一个View,使其底部与按钮顶部对齐,顶部与Top Layout Guide对齐,然后蓝色文本竖直方向上居于这个View的中间即可。如图3,相信大家都能很容易明白。
这个例子很简单,横屏和竖屏下元素的相对布局在方向上并没有改变,用简单的约束就可以轻松实现。接下来重点分享几个横屏和竖屏界面元素相对布局在方向上差别很大或完全不同的情形。
0x02 横屏和竖屏差别较大时的适配方案
0x02.0x01 使用xib,内置两个不同的View,方向旋转时切换
下面是一种业务场景,A,B,C,D四个View在横屏和竖屏状态下的布局分别如图-4和图-5所示。 该如何实现这种布局呢(要兼容iOS7,暂不考虑使用SizeClass)?
这种情形可以使用xib来布局,新建一个ViewController,添加两个与根View平行的View,其中一个称之为portraitView,负责竖屏布局;另一个称之为landscapeView,负责横屏布局,然后在ViewController的viewDidLayoutsubviews里根据屏幕方向来动态切换。废话不多说了,直接show code吧。
@property (strong, nonatomic) IBOutlet UIView *landscapeV
@property (strong, nonatomic) IBOutlet UIView *portraitV
@property (strong, nonatomic) UIView *currentV
- (void)viewDidLayoutSubviews
[super viewDidLayoutSubviews];
[self setupViewForOrientation];
- (void)setupViewForOrientation
UIInterfaceOrientation oritentation = [[UIApplication sharedApplication] statusBarOrientation];
[_currentView removeFromSuperview];
if (UIInterfaceOrientationIsPortrait(oritentation)) {
[self.view addSubview:_portraitView];
_currentView = _portraitV
[_currentView setFrame:self.view.bounds];
} else if (UIInterfaceOrientationIsLandscape(oritentation)) {
[self.view addSubview:_landscapeView];
_currentView = _landscapeV
[_currentView setFrame:self.view.bounds];
xib中view的结构如下图:
另外:storyboard上还不太清楚怎么添加多个平行的根view,请大神指教。
0x02.0x02 使用带有优先级的多约束,方向旋转时,动态更改约束的优先级
再来看下面图7和图8这个业务场景:横屏下A和B水平排列,竖屏下A和B垂直排列。同样,如果使用xib,添加两个不同的view,可以很快的完成需求。这里再提供一种思路,使用带有优先级的多个约束条件来实现,当屏幕方向旋转时,动态改变约束的优先级来达到目的。
在Autolayout中,添加的每个约束都有一个priority(优先级)的概念,默认状况下高优先级的会覆盖低优先级的约束,因此我们在布局时可以给元素添加多个约束条件(优先级不同),然后在屏幕方向旋转时,动态改变约束的优先级来实现横竖屏不同的界面布局。 show code time:
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *colorViewHeightC
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *colorViewBottomC
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *colorViewWidthC
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *colorViewTrailingC
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *grayViewTopToColorViewC
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *grayViewTopToSuperViewC
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *grayViewLeadingToSuperViewC
@property (weak, nonatomic) IBOutlet NSLayoutConstraint *grayViewLeadingToColorViewC
- (void)viewWillLayoutSubviews
[super viewWillLayoutSubviews];
[self setupViewForOrientation];
- (void)setupViewForOrientation
UIInterfaceOrientation oritentation = [[UIApplication sharedApplication] statusBarOrientation];
if (UIInterfaceOrientationIsPortrait(oritentation)) {
_colorViewHeightConstraint.priority = UILayoutPriorityDefaultH
_colorViewBottomConstraint.priority = UILayoutPriorityDefaultL
_colorViewTrailingConstraint.priority = UILayoutPriorityDefaultH
_colorViewWidthConstraint.priority = UILayoutPriorityDefaultL
_grayViewTopToColorViewConstraint.priority = UILayoutPriorityDefaultH
_grayViewTopToSuperViewConstraint.priority = UILayoutPriorityDefaultL
_grayViewLeadingToSuperViewConstraint.priority = UILayoutPriorityDefaultH
_grayViewLeadingToColorViewConstraint.priority = UILayoutPriorityDefaultL
} else if (UIInterfaceOrientationIsLandscape(oritentation)) {
_colorViewHeightConstraint.priority = UILayoutPriorityDefaultL
_colorViewBottomConstraint.priority = UILayoutPriorityDefaultH
_colorViewTrailingConstraint.priority = UILayoutPriorityDefaultL
_colorViewWidthConstraint.priority = UILayoutPriorityDefaultH
_grayViewTopToColorViewConstraint.priority = UILayoutPriorityDefaultL
_grayViewTopToSuperViewConstraint.priority = UILayoutPriorityDefaultH
_grayViewLeadingToSuperViewConstraint.priority = UILayoutPriorityDefaultL
_grayViewLeadingToColorViewConstraint.priority = UILayoutPriorityDefaultH
PS:总觉得这里要写的改变约束的代码有点啰嗦,不过确实是提供了另一种不同的思路。
0x02.0x03 基于Sizeclass(iOS8及其之后)
iOS8之后可以愉快地使用SizeClass进行布局了,不过这不是本文分享的重点,感兴趣的朋友自行Google吧。如果能够说服产品经理不再兼容iOS7,就可以统一使用SizeClass+Autolayout进行布局了。
通过几个简单的例子,本文给横竖屏适配方案提供了一些思路,实际的业务场景复杂多变,还需在实践中灵活运用。本文所有的代码可以在github上获取到,地址后续会补充上来
iOS开发技术交流!
翻译自“Auto Layout Guide”。 2 自动布局细则手册 2.1 堆栈视图 接下来的章节展示了如何使用堆栈视图创建更复杂的布局。堆栈视图是一个强大的工具,可以快速的,容易的设计用户界面。它们的属性允许深度控制如何布局视图。可以使用额外的,自定义的约束进一步设置;...
翻译自“Auto Layout Guide”。 1 入门 1.1 理解自动布局 自动布局根据视图层级结构中视图上的约束,动态计算所有视图的尺寸和位置。例如,可以约束一个按钮相对于一个图片视图水平居中,并让按钮的上边缘与图片的下边缘距离总是8个点。如果图片视图的尺寸或位置发生...
前言 iPhone自诞生以来,随着其屏幕尺寸不断的多样化,屏幕适配的技术一直在发展更新。目前,iOS系统版本已经更新到9.3,XCode的最新版本已经是7.3,仅iPhone历史产品的尺寸就已经有4种:3.5英寸、4.0英寸、4.7英寸、5.5英寸。最近,iPhone家族又...
用到的组件1、通过CocoaPods安装项目名称项目信息AFNetworking网络请求组件FMDB本地数据库组件SDWebImage多个缩略图缓存组件UICKeyChainStore存放用户账号密码组件Reachability监测网络状态DateTools友好化时间MBP...
用到的组件1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SDWebImage多个缩略图缓存组件 UICKeyChainStore存放用户账号密码组件 Reachability监测网络状态 DateTools友好...
岁月如风小少女,时光若梦白头翁。 作业二
撩汉无色,泡妞无胆
谈判 元老们对卓尔金星的叛乱行为感到震怒,他们要求中枢电脑计算出一个万无一失的方案,以便彻底消灭移居的叛军。中枢电脑沉思片刻,给出了一个答案:谈判。 磨刀霍霍的帝国军头领们面面相觑,他们从未想到过会向叛军低头谈判,只好等待着元老下达命令。经过和中枢电脑的充分沟通,元老们决定...
这是当时的风气,要慷慨激昂,顿挫抑扬,我还记得披发大叫,抱书独行,大风灭烛为大家传诵。每每读到鲁迅《集外集.序言》的这段话,民国时期的那段风云际会的时光便又一次从耳畔呼啸而过。 大抵是有这么一批人一身傲骨,书卷里暗藏傲气,魏晋气象名士风流在他们身上汩汩而出,才会让人愈发感动...
孩子4岁了,终于下定决心再减一次肥,女人真心是一辈子都在减肥,说的好听一点就是形体管理。30多岁,多次减肥,想想第一次应该是大一,高中走读一直都是胖胖的,大一突然变成了住校,吃没有油水的食堂,周末休息也都和小姐妹在逛逛逛,没怎么锻炼都急速瘦了下来,后来整个大学期间...
以下,是上个周一位学生的随笔: 五一小长假的第一天,天空中明亮的太阳很是温暖,甚至可以说有那么些炎热。春天还没好好享受,初夏似乎已经悄然来到了这里。 下午三点多,我从公园打完篮球,拖着劳累的身体慢慢走回家。刚投进了一个高难度的球,心里甚是高兴,又想着家中那柔软的沙发,我不禁...}

我要回帖

更多关于 ipad air老横屏 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信