您的位置:首页 > 产品设计 > UI/UE

IOS7 UIScrollView & UINavigationController

2014-04-15 09:23 357 查看
解决IOS7 带来的导航栏问题,以及UIScrollView 布局问题~

实例:

I recently downloaded Xcode 5 DP to test my apps
in iOS 7. The first thing I noticed and confirmed is that my view's bounds is not always resized to account for the status bar and navigation bar.

In
viewDidLayoutSubviews
,
I print the view's bounds:

{{0, 0}, {320, 568}}

This results in my content appearing below the navigation bar and status bar.

I know I could account for the height myself by getting the main screen's height, subtracting the status bar's height and navigation bar's height, but that seems like unnecessary extra work.

How can I fix this issue?

Update:

I've found a solution for this specific problem. Set the navigation bar's translucent property to NO:
self.navigationController.navigationBar.translucent = NO;


This will fix the view from being framed underneath the navigation bar and status bar.

However, I have not found a fix for the case when you want the navigation bar to be translucent. For instance, viewing a photo full screen, I wish to have the navigation bar translucent, and the view to be framed underneath it. That works, but when I toggle
showing/hiding the navigation bar, I've experienced even stranger results. The first subview (a UIScrollView) gets its bounds y origin changed every time.

解决方案:

You can achieve this by implementing a new property called
edgesForExtendedLayout
in
iOS7 SDK. Please add the following code to achieve this,
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
self.edgesForExtendedLayout = UIRectEdgeNone;


You need to add the above in your
-(void)viewDidLoad
method.

iOS 7 brings several changes to how you layout and customize the appearance of your UI. The changes in view-controller layout, tint color, and font
affect all the UIKit objects in your app. In addition, enhancements to gesture recognizer APIs give you finer grained control over gesture interactions.

Using View Controllers

In iOS 7, view controllers use full-screen layout. At the same time, iOS 7 gives you more granular control over the way a view controller lays out its views. In particular, the concept of full-screen layout has been refined to let a view controller specify
the layout of each edge of its view.

The
wantsFullScreenLayout
view
controller property is deprecated in iOS 7. If you currently specify
wantsFullScreenLayout
= NO
, the view controller may display its content at an unexpected screen location when it runs in iOS 7.

To adjust how a view controller lays out its views,
UIViewController
provides
the following properties:

edgesForExtendedLayout

The
edgesForExtendedLayout
property
uses the
UIRectEdge
type,
which specifies each of a rectangle’s four edges, in addition to specifying none and all. Use
edgesForExtendedLayout
to
specify which edges of a view should be extended, regardless of bar translucency. By default, the value of this property is
UIRectEdgeAll
.

extendedLayoutIncludesOpaqueBars

If your design uses opaque bars, refine
edgesForExtendedLayout
by
also setting the
extendedLayoutIncludesOpaqueBars
property
to NO. (The default value of
extendedLayoutIncludesOpaqueBars
is NO.)

automaticallyAdjustsScrollViewInsets

If you don’t want a scroll view’s content insets to be automatically adjusted, set
automaticallyAdjustsScrollViewInsets
to NO.
(The default value of
automaticallyAdjustsScrollViewInsets
is YES.)

topLayoutGuide, bottomLayoutGuide

The
topLayoutGuide
and
bottomLayoutGuide
properties
indicate the location of the top or bottom bar edges in a view controller’s view. If bars should overlap the top or bottom of a view, you can use Interface Builder to position the view relative to the bar by creating constraints to the bottom of
topLayoutGuide
or
to the top of bottomLayoutGuide. (If no bars should overlap the view, the bottom of
topLayoutGuide
is
the same as the top of the view and the top of
bottomLayoutGuide
is
the same as the bottom of the view.) Both properties are lazily created when requested.

Please refer, apple
doc
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: