ios6-7以后用户开热点后的屏幕适配

// 排版时,注意logical coordinate space和device coordinate space的区别,注意frame和bounds的区别!

- (void)loadView

{

// ...

// 计算Custom Content View的Rect
    if (!_supportFullScreen)
    {
        CGFloat contentSatrtY = 0;
        
        if (IS_HOTSPOT_CONNECTED) { // iPhone4(s)-iOS6/iOS7屏幕坐标系下:hostView.frame={{0, 40}, {320, 440}}/{{0, 20}, {320, 460}}
            contentSatrtY = STATUS_AND_NAV_BAR_HEIGHT; // 84
            if (SYSTEM_VERSION >= 7.0) { // 如果设置了edgesForExtendedLayout=UIRectEdgeNone
                contentSatrtY -= HOTSPOT_STATUSBAR_HEIGHT;// 64(有热点栏时,会自动下移20)
            }
        } else { // iPhone4(s)-iOS6/iOS7屏幕坐标系下:hostView.frame={{0, 20}, {320, 460}}/{{0, 0}, {320, 480}}
            contentSatrtY = NORMAL_STATUS_AND_NAV_BAR_HEIGHT; // 64
        }
        
        // contentSatrtY基于UIViewController.view所在的屏幕坐标系进行排版
        contentRect = CGRectMake(0, contentSatrtY, hostView.width, SCREEN_HEIGHT-STATUS_AND_NAV_BAR_HEIGHT-TOOLBAR_HEIGHT);
    }
    else // 针对iOS6/7分别配置了wantsFullScreenLayout=YES/edgesForExtendedLayout=UIRectEdgeAll,全屏隐藏状态栏(包括热点栏)、导航栏和工具栏之后高度为SCREEN_HEIGHT。
    {
        contentRect = CGRectMake(0, 0, hostView.width, hostView.height);
    }

// ...

}

// 如有必要,需监听系统状态栏变更通知:UIApplicationWillChangeStatusBarFrameNotification

- (void)handleUIApplicationWillChangeStatusBarFrameNotification:(NSNotification*)notification
{
    CGRect newStatusBarFrame = [(NSValue*)[notification.userInfo objectForKey:UIApplicationStatusBarFrameUserInfoKey] CGRectValue];

// 根据系统状态栏高判断热点栏的变动
    BOOL bPersonalHotspotConnected = (CGRectGetHeight(newStatusBarFrame)==(SYS_STATUSBAR_HEIGHT+HOTSPOT_STATUSBAR_HEIGHT)?YES:NO);

CGPoint newCenter = CGPointZero;
    CGFloat OffsetY = bPersonalHotspotConnected?+HOTSPOT_STATUSBAR_HEIGHT:-HOTSPOT_STATUSBAR_HEIGHT;
    if (SYSTEM_VERSION >= 7.0) { // 即使设置了extendedLayoutIncludesOpaqueBars=NO/edgesForExtendedLayout=UIRectEdgeNone,对没有自动调整的部分View做必要的手动调整
        newCenter = self.someSubView.center;
        newCenter.y += OffsetY;
        self.someSubView.center = newCenter;
    } else { // Custom Content对应的view整体调整
        newCenter = self.contentView.center;
        newCenter.y += OffsetY;
        self.contentView.center = newCenter; // contentView为Custom Content对应的view
    }
}

@end

.iPhone/iOS个人热点的interface

iPhone开启个人热点(桥接上网)时,会多出bridge接口。

iPhone5s/iOS8.2开启个人热点时,遍历可发现多出3个活跃的bridge100接口(IFF_UP),sa_family分别是AF_LINK(18)、AF_INET6(30)、AF_INET(2)。

遍历interface的代码片段如下:

struct ifaddrs *interfaces = nil;

if(!getifaddrs(&interfaces))

{

for(structifaddrs *interface = interfaces; interface; interface = interface->ifa_next) {

if ((interface->ifa_flags&IFF_UP) ==IFF_UP) {

log_notice("ifa_name : %s, ifa_addr->sa_family : %d", interface->ifa_name, interface->ifa_addr->sa_family);

}

}

}

if (interfaces) {

freeifaddrs(interfaces);

interfaces = NULL;

}

时间: 2024-12-19 19:34:59

ios6-7以后用户开热点后的屏幕适配的相关文章

Linux 使用create_ap开热点后无法连接wifi问题的解决

使用create_ap开启热点,关闭后,无法连接wifi. 使用sudo rfkill list all发现wifi没有被锁住,使用 sudo service network-manager start也无法解决问题 后来使用create_ap -h查看此软件的相关帮助,其中有 --fix-unmanaged If NetworkManager shows your interface as unmanaged after you close create_ap, then use this o

html5开发之viewport使用-屏幕适配

随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择.然而,每一款手机有不同的分辨率,不同屏幕大小,如何使我们开发出来的应用或页面大小能适合各种高端手机使用呢?学习html5 viewport的使用能帮你做到这一点-- viewport 语法介绍: 01 <!-- html document --> 02 <meta name="viewport" 03     

突破PTU网页认证校园网开热点

人总有浮躁, 之前只是把脚本写好,没有实操过. [这是更新过的教程,保证只要按教程走一定可以--->运行成功] 教程可能有些生涩,需要一点耐心 ###ps:不保证热点不出现断网情况[此时手机WiFi关开一次既解决] 教程篇 所有所需文件的下载地址[请先下载] 链接:https://pan.baidu.com/s/1LutHPGTXssQ9dZciXIdWVA 提取码:fx9o 下载内容一共如图所示 1 安装一个运行软件 python-3.7.4-amd64.exe 一直点next知道完成安装[]

[解决]IP地址非法,请接入联通热点后重新获取

在使用联通chinaunicom WLAN上网时,在弹出的登陆界面后输入账号.密码,点登陆,显示IP地址非法,请接入联通热点后重新获取.现在在其他地方看到解决办法连接chinaunicom,弹出登陆界面后,不要输入账号.密码,在弹出的登陆界面里找***10010.com,点一下这个网址,然后再输入账号.密码,点登陆就可以了本人已试过,用此方法就可以使用联通的WLAN上网了 http://bbs.dospy.com/viewthread.php?tid=16421996&bbsid=575

iphone开热点电脑总是搜不到问题的解决办法(百试百灵)

iphone开热点,电脑总是搜不到??? 1.确认打开wlan,打开个人热点后, 2.在iPhone热点设置密码那里,把密码改少一位,点击完成 3.然后看电脑搜到没有,如果有,把密码改回来,电脑就自动连上了, 4.如果没有,把个人热点关闭一下,再打开,再修改一下密码,点击完成 5.再去电脑把wlan重新打开一下,看搜到没有,再把密码改回来,基本上,这次就可以了,百试百灵哦!!!!!

ASP.NET MVC加载用户控件后并获取其内控件值或赋值

有网友看了这篇<ASP.NET MVC加载ASCX之后,并为之赋值>http://www.cnblogs.com/insus/p/3643254.html 之后,问及Insus.NET,不想在控件制器内进行赋值,而是想在视图中使用jQuery来获取用户控件内的控件值或是为它们赋值.那需要怎样来做呢? 下面Insus.NET花上少少时间,做个简单的例子,演示与分享实现的方法. 实现之前,先修改一下AscxUtility.cs这个类中的 public static HtmlString Rende

Android 解决通过自定义设置打开热点后手机搜索不到热点的问题。

开发过程中出现了通过自定义设置打开热点后手机搜索不到热点的问题. 后来通过观看  /data/misc/wifi  目录下的  hostapd.conf  文件,发现是 interface=ap0 driver=nl80211 ctrl_interface=/data/misc/wifi/hostapd ssid=Anffff channel=6 ieee80211n=1 hw_mode=g ignore_broadcast_ssid=1 wowlan_triggers=any max_num_

机器学习进阶-图像形态学变化-礼帽与黑帽 1.cv2.TOPHAT(礼帽-原始图片-开运算后图片) 2.cv2.BLACKHAT(黑帽 闭运算-原始图片)

1.op = cv2.TOPHAT  礼帽:原始图片-开运算后的图片 2. op=cv2.BLACKHAT 黑帽: 闭运算后的图片-原始图片 礼帽:表示的是原始图像-开运算(先腐蚀再膨胀)以后的图像 黑帽:表示的是闭运算(先膨胀再腐蚀)后的图像 - 原始图像 代码: 第一步:读取图片 第二步:使用cv2.MOPRH_TOPHAT获得礼帽图片 第三步:使用cv2.MOPRH_BLACKHAT获得黑帽图片 import cv2 import numpy as np # 第一步读入当前图片 img =

oracle 表被另一个用户锁住后的解决办法

oracle 表被另一个用户锁住后的解决办法 1.查看数据库锁,诊断锁的来源及类型: select object_id,session_id,locked_mode from v$locked_object; 2.找出数据库的serial#,以备杀死: select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked_object t1,v$session t2 where t1.session_id=t2.sid order by