- 浏览: 41090 次
文章分类
最新评论
-
peng13123:
...
Hibernate4+Spring3+SpringMVC -
peng13123:
好吧,呵呵zxxwlj 写道 翻/墙?违法。。。
我想问为啥我goagent的文章被删除了 -
zxxwlj:
翻/墙?违法。。。
我想问为啥我goagent的文章被删除了
如果你准备将你的老的 iOS 6 app 迁移到 iOS 7/8 上,那么你必须注意了。当你的老的 app 在 iOS 7 设备上运行时,所有ViewController 的视图都整体上移了,因为 iOS 7 把整个屏幕高度(包括状态栏和导航栏)都作为了视图控制器的有效高度。于是你的视图上移了,并和上层的状态栏交叠在一起。
你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度)。
但是苹果显然已经考虑到这个问题,他们在 iOS 7 SDK 中为 ViewController 提供了一个 edgesForExtendedLayout 新属性。如果你将这个属性设置为UIRectEdgeNone,则 viewController 的所有子视图都会自动调整,这样在 iOS 7 下看到的效果和 iOS 6 完全一样。
为了方便,你可以为 UIViewController 扩展一个子类,并覆盖它的 viewDidLoad 方法:
@implementation DerivedViewController
- (void)viewDidLoad
{
[superviewDidLoad];
if ([selfrespondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
}
@end
然后你以后所有的 ViewController 都从这个 DerivedViewController 类继承。
但不幸的是,我们的程序仍然有大量 iOS<7 的用户 ,我们无法立即抛弃对 iOS 6 的支持。无论 edgesForExtendedLayout 还是UIRectEdgeNone,都只能在 iOS7 下有效。对于 iOS 6,我将以上代码修改为:
- (void)viewDidLoad
{
[superviewDidLoad];
#if__IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
if ([selfrespondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
#else
float barHeight =0;
if (!isIPad()&& ![[UIApplication sharedApplication] isStatusBarHidden]) {
barHeight+=([[UIApplication sharedApplication]statusBarFrame]).size.height;
}
if(self.navigationController &&!self.navigationController.navigationBarHidden) {
barHeight+=self.navigationController.navigationBar.frame.size.height;
}
for (UIView *viewin self.view.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height - barHeight);
} else {
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height);
}
}
#endif
}
通过宏 __IPHONE_OS_VERSION_MAX_ALLOWED 判断 deployment target 是否 >7.0。>7.0则使用新的 edgesForExtendedLayout API,负责使用比较笨的方法逐个下移 subviews,并自动根据状态栏/导航栏的可视状态计算要移动的偏移量。
注:如果已升级至Xcode5,将导航控制器的 Top Bar 设置为一种“Opacque ...”(不透明)类型可解决此问题。
你当然可以在 Xcode 中修改每个 View,将他们下移20个像素(状态栏高度)或者64个像素(状态栏+导航栏高度)。
但是苹果显然已经考虑到这个问题,他们在 iOS 7 SDK 中为 ViewController 提供了一个 edgesForExtendedLayout 新属性。如果你将这个属性设置为UIRectEdgeNone,则 viewController 的所有子视图都会自动调整,这样在 iOS 7 下看到的效果和 iOS 6 完全一样。
为了方便,你可以为 UIViewController 扩展一个子类,并覆盖它的 viewDidLoad 方法:
@implementation DerivedViewController
- (void)viewDidLoad
{
[superviewDidLoad];
if ([selfrespondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
}
@end
然后你以后所有的 ViewController 都从这个 DerivedViewController 类继承。
但不幸的是,我们的程序仍然有大量 iOS<7 的用户 ,我们无法立即抛弃对 iOS 6 的支持。无论 edgesForExtendedLayout 还是UIRectEdgeNone,都只能在 iOS7 下有效。对于 iOS 6,我将以上代码修改为:
- (void)viewDidLoad
{
[superviewDidLoad];
#if__IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
if ([selfrespondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;
#else
float barHeight =0;
if (!isIPad()&& ![[UIApplication sharedApplication] isStatusBarHidden]) {
barHeight+=([[UIApplication sharedApplication]statusBarFrame]).size.height;
}
if(self.navigationController &&!self.navigationController.navigationBarHidden) {
barHeight+=self.navigationController.navigationBar.frame.size.height;
}
for (UIView *viewin self.view.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height - barHeight);
} else {
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y +barHeight, view.frame.size.width, view.frame.size.height);
}
}
#endif
}
通过宏 __IPHONE_OS_VERSION_MAX_ALLOWED 判断 deployment target 是否 >7.0。>7.0则使用新的 edgesForExtendedLayout API,负责使用比较笨的方法逐个下移 subviews,并自动根据状态栏/导航栏的可视状态计算要移动的偏移量。
注:如果已升级至Xcode5,将导航控制器的 Top Bar 设置为一种“Opacque ...”(不透明)类型可解决此问题。
发表评论
-
Xcode7 ios9不能用http请求
2015-09-17 18:49 681Xcode7 使用NSURLSession发送HTTP请求的问 ... -
iOS UITableViewCell 中 调整imageView 的图片大小
2015-08-26 16:10 1378//设置图片 [cell.imageView setImage ... -
[转]iOS 万能跳转界面方法 (runtime实用篇一)
2015-08-24 10:27 579在开发项目中,会有这样变态的需求: 推送:根据服务端推送过来 ... -
周堋斐:梦想的开发者
2015-04-13 17:56 012年的深圳软件园也是各种。呵呵哒 -
IOS判断app在appstore是否有可用的更新
2015-03-13 10:25 540iTunes可以提供app的版本信息,主要通过appid获取, ... -
uitableview分割线 左右边距相同
2015-01-21 15:59 2537_myTableView1.separatorInset= ... -
在uiimageview中设置网络图片等比例大小
2014-12-30 15:38 724NSData *data=[NSData dataWith ... -
[转]iOS UISCrollView循环滚动 实现
2014-12-30 13:42 682google了半天发现很多人竟然搞不定,甚至还有人用数组左移右 ... -
push的时候,感觉上一个页面的视图还有残留,然后停顿了一下,才消失的解决
2014-12-10 20:04 1841这个,以前遇到过,后来不知怎么弄好了,现在就是你如果改下pus ... -
广告轮播
2014-11-17 20:05 474h <UIAlertViewDelegate,UIScr ... -
设置全局navigation barbuttonitem
2014-11-17 19:58 746#pragma mark 设置全局navigation bar ... -
nsdate 前一天,后一天
2014-11-17 19:57 1162h { NSDate *choseDate;//显示日 ... -
sdwebimage ios8 报错
2014-11-02 00:22 679报错:Use of undeclared identifier ... -
之前有人整理过Git上好用的iOS库,我搬运一下
2014-10-31 14:56 315之前有人整理过Git上好用的iOS库,我搬运一下: http: ... -
ios中添加和移除view
2014-08-14 11:36 827la = [[UILabel alloc]init]; ... -
UITextField只能输入数字且小数点后保留2位
2014-07-18 17:17 573#pragma mark UITextFieldDeleg ... -
NSTimer倒计时
2014-07-17 10:56 529// [NSTimer scheduledTimerWithT ... -
转】视图切换总结
2014-06-04 12:06 5481、利用ModalViewController切换View ... -
ios 判断网络连接以及获取路由信息
2014-05-29 11:53 1675首先 引入 Reachability.h 和Reachabil ... -
UINavigationController如何连续返回两级/回到第一级
2014-01-18 09:44 816//连续返回两级 int index=[[self.navig ...
相关推荐
为了启用平移,我们需要设置`QGraphicsView`的`dragMode`为`ScrollHandDrag`,这样用户就可以通过按下鼠标左键并拖动来移动视图。另外,可以使用`setTransformOriginPoint`设置旋转和平移的原点,通常选择场景中心...
在Qt框架中,`QGraphicsView`是一个强大的组件,用于显示和操作复杂的2D图形场景。本篇文章将详细讲解如何利用`QGraphicsView`来实现图像的放大、缩小和拖拽功能,这对于创建具有交互性的图形用户界面(GUI)特别...
1. **offsetLeftAndRight(offsetX)**:这个方法用于水平方向上平移一个View。`offsetX`参数表示View需要移动的像素值。如果`offsetX`是正数,View会向右移动;反之,如果`offsetX`是负数,View会向左移动。此方法...
3. **QGraphicsView**: 它是图形视图,负责将Graphics Scene显示在窗口上。你可以调整QGraphicsView的缩放、平移等属性,以提供不同的查看体验。例如,设置`setDragMode()`可以允许用户通过鼠标拖动来平移视图,`...
- 当软键盘弹出时,若希望布局整体上移,需在Activity的根布局使用`android:fitsSystemWindows="true"`,并结合`windowSoftInputMode="adjustResize"`,这样可以避免被键盘遮挡。 - 对于特定View(如EditText)...
为了解决这个问题,开发者需要采取措施让屏幕随键盘的出现而上移,确保用户能方便地与界面元素交互。以下是一种实现这一功能的方法: 首先,为了监听UITextField的输入状态,我们需要遵循UITextFieldDelegate协议。...
在计算机图形学中,平移(Translation)是一种基本的几何变换,它涉及到将物体或坐标系在三维空间中整体移动,而保持其形状和大小不变。这个过程在各种应用程序中非常常见,比如游戏开发、虚拟现实、CAD设计等。本...
6. **视图变换(View Transformations)**: GraphicsView支持缩放、旋转和平移等视图变换。可以使用`scale()`, `rotate()`, `translate()`等方法来调整视图,以适应不同的查看需求。 7. **高性能渲染**: Qt的优化...
3. **应用动画**:调用View的`startAnimation()`方法,将动画应用到特定的View上。 四、源码分析 资源包中的"源码说明.txt"可能包含对如何在代码中实现上述步骤的详细解释,而"Android View中添加Animation"可能是...
为了更好地控制变形过程,GaussView还提供了三种不同的原子移动模式:“平移全组”、“平移原子”和“固定”。 - **平移全组**:选择该模式后,所有选中的原子将作为一个整体进行移动。 - **平移原子**:此模式允许...
在QT中,QGraphicsView是一个关键组件,用于展示复杂的2D图形场景,包括图像、对象和动画。当我们处理图形视图时,缩放功能是必不可少的,它允许用户以不同比例查看和操作场景内容。本篇文章将深入探讨如何在...
我们可以通过`ObjectAnimator`或`ValueAnimator`来创建动画,改变图形的位置、大小、颜色等属性,从而实现旋转、缩放、平移等效果。 在描述中提到的“LoadingPopPoint”可能是指一种特定的loading效果,比如点状...
对于不同分辨率的设备,SmartImageView能自动处理图片缩放,确保图片在各种屏幕尺寸上都能正确显示。 通过使用SmartImageView框架,开发者能够轻松处理Android应用中的图片加载问题,提升应用的性能和用户体验。...
滤镜效果则利用Shader类来实现,如BitmapShader可以将图片作为纹理应用到自定义View上,ColorFilter可以让颜色产生各种变化,例如灰度、饱和度调整等。同时,可以通过BlurMaskFilter或BoxBlur算法实现模糊效果,增强...
使用Qt QGraphic实现一个应用场景,直接导入背景图,并在背景画布上绘制几何图形,包括矩形、圆形等,支持画布整体移动、放大和缩小,画布恢复,图形item选中、移动、旋转。item移动 会实时显示全局坐标以及相对于...
滚动动画并不直接由一个特定的类提供,而是通过`ViewFlipper`、`ViewAnimator`等视图容器的动画方法实现,或者通过自定义`View`和`onDraw()`方法配合`postInvalidate()`来实现。滚动动画可以用来在多个视图之间切换...
自定义uni-popup内容,包含picker-view组件,前提基础需要运行在uni-app项目之下,且已保证插入外置组件,根据传入的list数据渲染选择列表,且能回填数据 组件调用 :valueKey="'value'" />
本文将详细介绍如何解决这一问题,实现软键盘弹出时页面整体上移,以及点击空白区域收起软键盘的效果,并且将11位手机号格式化为xxx xxxx xxxx的显示形式。 首先,要让页面整体上移,我们需要在`AndroidManifest....
"Android积分签到动画 位移+透明 Android签到动画效果 签到上移消失动画效果"这个主题涉及到的是如何实现一个具有吸引力和交互性的签到功能,特别是签到完成后,积分展示区域通过位移和透明度变化逐渐消失的动画效果...
饼状图是一种常用的表示比例或部分与整体关系的数据可视化方式。在Android中,我们可以通过自定义View类来实现饼状图的绘制。首先,我们需要了解`onDraw()`方法,这是View绘图的核心,它会在每次View需要更新时被...