当前位置: 首页 > 知识库问答 >
问题:

解释iOS7中自动调整滚动视图插图、扩展布局(包括遮光栏、边缘扩展布局)之间的差异

司马英才
2023-03-14

我已经读了很多关于ios7ui转换的书。

我不能得到这三个属性自动调整ScrollViewInset,扩展布局包括OpaqueBars,edgesForExtendedLayout?

例如,我试图使视图控制器从状态栏下方开始,但无法实现。

共有3个答案

松雅健
2023-03-14

我使用的是故事板,上面的建议很有效,但是我不确定如何实现它。下面是swift中的一个简短示例,说明它如何通过将建议的解决方案放入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.
  }

}
尤祖鹤
2023-03-14

不确定是否正在使用故事板,但如果正在使用,则要使视图控制器从状态栏下方(以及底部栏上方)开始,请执行以下操作:

在IB中选择视图控制器,在属性检查器中,取消选择“延伸边-顶部栏下”和“延伸边-底部栏下”。

谷泳
2023-03-14

从iOS7开始,视图控制器默认使用全屏布局。同时,您可以更好地控制其视图的布局方式,这是通过以下属性完成的:

扩展布局

基本上,使用此属性可以设置视图的哪一侧可以扩展以覆盖整个屏幕。假设您将UIViewController推入UINavigationController。布局视图控制器的视图时,它将从导航栏结束的位置开始,但此属性将设置视图的哪一侧(顶部、左侧、底部、右侧)可以扩展以填充整个屏幕。

让我们看一个例子:

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

这里您没有设置edgesForExtendedLayout的值,因此采用默认值(UIRectEdgeAll),因此视图扩展其布局以填充整个屏幕。

这就是结果:

可以看到,红色背景延伸到导航栏和状态栏后面。

现在,您要将该值设置为UIRectEdgeNo,因此您要告诉视图控制器不要扩展视图以覆盖屏幕:

UIViewController *viewController = [[UIViewController alloc] init];
viewController.view.backgroundColor = [UIColor redColor];
viewController.edgesForExtendedLayout = UIRectEdgeNone;
UINavigationController *mainNavigationController = [[UINavigationController alloc] initWithRootViewController:viewController];

结果是:

自动调整滚动视图插图

当您的视图是UIScrollView或类似的视图(如UITableView)时,将使用此属性。你希望你的表格从导航栏结束的地方开始,因为如果没有,你就看不到全部内容,但同时你希望你的表格在滚动时覆盖整个屏幕。在这种情况下,将edgesForExtendedLayout设置为无将不起作用,因为您的表将在导航栏结束的地方开始滚动,并且它不会在后面。

此属性在这里非常方便,如果让视图控制器自动调整插入(将此属性设置为“是”,也是默认值),它将向表格顶部添加插入,因此表格将从导航栏结束的位置开始,但滚动将覆盖整个屏幕。

这是当设置为“否”时:

是(默认情况下):

在这两种情况下,表都在导航栏后面滚动,但在第二种情况下(是),它将从导航栏下面开始。

扩展布局

这个值只是前面值的一个加法。默认情况下,此参数设置为NO。如果状态栏不透明,视图将不会扩展到包括状态栏,即使您扩展视图以覆盖它(edgesForExtendedLayouttoUIRectEdgeAll)。

如果您将值设置为YES,这将允许视图再次位于状态栏下方。

如果有什么不清楚的地方,写一条评论,我会回答的。

iOS如何知道要使用哪个UIScrollView?

iOS获取ViewController视图中的第一个子视图,即索引0处的子视图,如果它是UIScrollView的子类,则将解释的属性应用于它。

当然,这意味着默认情况下,UITableViewController工作(因为UITableView是第一个视图)。

 类似资料:
  • 我遇到了自动布局的问题,似乎无法找到应该很容易实现的答案。 我有以下视图层次结构: 标签上的前导/尾随限制使它们在更薄的设备上更高(iPhone 4s vs iPhone 6)。 为了让UIScrollview正常工作,我需要在UIScrollView内部设置UIView的高度约束,以避免出现“不明确的高度”警告。 但在iPhone 4s上运行时,UIView不够高,无法容纳它的子视图。 到目前为

  • 我有一个自定义视图CustomLayout(蓝色,自定义UIView),该视图包含3个子视图,通过使用约束(布局锚定)垂直对齐,每个视图按照以下顺序对齐: 1视图:幻灯片(红色,自定义UIView) 我想,当我单击按钮(黄色)时,如果使用动画打开,SlideLayout(红色)的高度大小会增加,如果关闭,则会减少。和其他视图必须在动画期间更改位置,如果SlideLayout增加/减少,则父视图(C

  • > < li> 我在CollapsingToolbarLayout中有一个imageview,它是AppBarLayout的一部分,如下所示。每当我尝试从imageview开始滚动内容时,它从不滚动,但当我从recycle view/nested scroll view滚动时,它会滚动内容。这是CoordinatorLayout的预期行为吗?如果我想滚动内容,即imageview和我的recycl

  • 我有一个奇怪的问题与和(与设计支持库22.2.0) 使用小于的内容,我应该有一个固定的内容。然而,尝试上下滚动内容,我可以得到内容被移位,再也不会出现在自己的位置上。 这里的代码:

  • 我有一个片段,我想在其中使用折叠工具栏布局 当collapsing_toolbar展开时,我希望显示图像,当折叠时,我希望只有@id/custom_layout。custom_layout是一个带有文本视图和图像视图的相对布局。 我想要有完全相同的行为,就像我有以下行为一样: 而不是自定义布局。 为什么这是不工作?即使折叠ToobarLayout扩展我看到的ImageView和自定义布局。 !!注

  • 是否有任何方法可以使用android: fillViewport="true"和一个子LinearLayout填充所有视图,当LinearLayout的内容不够高时? 到目前为止,在ScrollView中的LinearLayout中,我们必须使用Android:layout _ height = " wrap _ content "。我们可以添加一些东西来填充所有的滚动视图吗?