我已经读了很多关于ios7ui转换的书。
我不能得到这三个属性自动调整ScrollViewInset,扩展布局包括OpaqueBars,edgesForExtendedLayout?
例如,我试图使视图控制器从状态栏下方开始,但无法实现。
我使用的是故事板,上面的建议很有效,但是我不确定如何实现它。下面是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.
}
}
不确定是否正在使用故事板,但如果正在使用,则要使视图控制器从状态栏下方(以及底部栏上方)开始,请执行以下操作:
在IB中选择视图控制器,在属性检查器中,取消选择“延伸边-顶部栏下”和“延伸边-底部栏下”。
从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。如果状态栏不透明,视图将不会扩展到包括状态栏,即使您扩展视图以覆盖它(edgesForExtendedLayout
toUIRectEdgeAll
)。
如果您将值设置为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 "。我们可以添加一些东西来填充所有的滚动视图吗?