use*_*819 247 xcode objective-c uiviewcontroller ios ios7
我一直在阅读很多关于iOS7 UI过渡的内容.
我不能够得到什么这三个属性automaticallyAdjustsScrollViewInsets,extendedLayoutIncludesOpaqueBars,edgesForExtendedLayout?
例如,我试图让我的视图控制器从状态栏下面开始,但我无法实现它.
Ant*_* MG 614
从iOS7开始,视图控制器默认使用全屏布局.同时,您可以更好地控制它的视图布局,并使用这些属性完成:
edgesForExtendedLayout
基本上,通过此属性,您可以设置视图的哪些边可以扩展以覆盖整个屏幕.想象一下,你推进了UIViewController一个UINavigationController.当布局该视图控制器的视图时,它将从导航栏结束的位置开始,但此属性将设置视图的哪一侧(顶部,左侧,底部,右侧)可以扩展以填充整个屏幕.
让我们看一个例子:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Run Code Online (Sandbox Code Playgroud)
这里您没有设置值edgesForExtendedLayout,因此默认值为take(UIRectEdgeAll),因此视图扩展其布局以填充整个屏幕.
这是结果:

如您所见,红色背景延伸到导航栏和状态栏后面.
现在,您要将该值设置为UIRectEdgeNone,因此您告诉视图控制器不要扩展视图以覆盖屏幕:
UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
Run Code Online (Sandbox Code Playgroud)
结果如下:

automaticallyAdjustsScrollViewInsets
当您的视图是UIScrollView或类似的时候使用此属性,例如UITableView.您希望您的表从导航栏结束的位置开始,因为如果没有,您将看不到整个内容,但同时您希望您的表在滚动时覆盖整个屏幕.在这种情况下,设置edgesForExtendedLayout为None将不起作用,因为您的表将开始滚动导航栏结束的位置,它不会在它后面.
这里是这个属性派上用场的地方,如果让视图控制器自动调整insets(将此属性设置为YES,也是默认值),它会将insets添加到表的顶部,这样表将从导航开始的地方栏结束,但滚动将覆盖整个屏幕.
这是当设置为NO时:

和(默认情况下):

在这两种情况下,表格在导航栏后面滚动,但在第二种情况下(是),它将从导航栏下方开始.
extendedLayoutIncludesOpaqueBars
这个值只是对以前的值的补充.默认情况下,此参数设置为NO.如果状态栏不透明,则视图将不会扩展为包括状态栏,即使您将视图扩展到覆盖它(edgesForExtendedLayoutto UIRectEdgeAll)也是如此.
如果将值设置为YES,则会允许视图再次位于状态栏下方.
如果事情不明确,请写评论,我会回答.
iOS如何知道UIScrollView的用途?
iOS抓取ViewController视图中的第一个子视图,索引为0的子视图,如果它是子类,UIScrollView则将解释的属性应用于它.
当然,这意味着UITableViewController默认工作(因为它UITableView是第一个视图).
Ali*_*dle 15
不确定您是否正在使用故事板,但如果您正在使用,请使视图控制器从状态栏下方(并在底部栏上方)开始:
在IB中选择视图控制器,在属性检查器中,取消选择"扩展边缘 - 在顶部条形图下"和"延伸边缘 - 在底部条形图下".
Chr*_*ley 10
我正在使用故事板并使用上述建议,但我不确定如何实现它.下面是一个简短的例子,它通过将推荐的解决方案放入ViewController来快速解决问题.
import Foundation
import UIKit
// This ViewController is connected to a view on a storyboard that
// has a scrolling sub view.
class TheViewController: UIViewController {
// Prepares the view prior to loading. Putting it in viewDidAppear didn't work.
override func viewWillAppear(animated: Bool) {
// this method is an extension of the UIViewController
// so using self works as you might expect.
self.automaticallyAdjustsScrollViewInsets = false
// Default is "true" so this sets it to false tells it to use
// the storyboard as you have it placed
// and not how it thinks it should place it.
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题:默认情况下,自动调整设置为true会导致故事板设计和模拟器之间出现差异

已解决:已应用上述代码,关闭自动调整功能.

小智 5
我通过添加这一行解决了这个问题,但我的问题与a有关UIView,而不是UIScrollView
self.navigationController.navigationBar.translucent = NO;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
76328 次 |
| 最近记录: |