gpt4 book ai didi

ios - 纵向xib调整为横向时需要改变UIScrollView contentSize

转载 作者:行者123 更新时间:2023-12-01 17:43:24 28 4
gpt4 key购买 nike

我有一个 UIViewController 和一个纵向的 iPad xib。当我的 iPad 处于横向并将该 View Controller 放入 UISplitViewController 的详细信息 Pane 时,它会自动调整大小以适应这很棒。

但是,当我在 -viewDidLoad 中配置我的 View 时, View 的最终大小还不是横向/大小。

-didRotateFromInterfaceOrientation: 方法和与之关联的其他方法在 UIViewController 已经加载到横向时不会被调用,所以我何时何地能够正确设置 ScrollView 的 contentSize 及其内容?

我只希望我的 ScrollView 垂直滚动,所以我想确保 ScrollView 中的内容 View 在任何方向上都重新适合 View Controller 的宽度。

无论我检查什么 .frame 或 .bounds,无论是在我的 View 、 ScrollView ,还是我的 SplitViewController 的详细 View Controller 上,都会向我显示我的实际尺寸是多少。在横向使用 UISplitViewController 时,左侧为 320px 宽,这意味着右侧不应超过 704px 宽,但每当我检查 View 和 ScrollView 的框架和边界时,它们报告为 768px 宽这是不正确的。

我的 ScrollView 显然只有 704px 宽,因为我可以正确地看到滚动指示器。

我错过了什么?

这是我在 -viewDidLoad 中的代码...

CGSize textSize = [self.purchase.textDescription sizeWithFont:self.labelTextDescription.font constrainedToSize:allowedSize lineBreakMode:UILineBreakModeWordWrap];

CGRect textFrame = self.labelTextDescription.frame;
textFrame.size.height = textSize.height;
self.labelTextDescription.frame = textFrame;

CGRect contentFrame = self.contentView.frame;
contentFrame.size.height += textSize.height;

if (contentFrame.size.width > self.scrollView.frame.size.width) {
contentFrame.size.width = self.scrollView.frame.size.width;
}

self.contentView.frame = contentFrame;

[self.scrollView addSubview:self.contentView];
self.scrollView.contentSize = self.contentView.frame.size;

最佳答案

布置 View 和设置 ScrollView 的contentSize 的适当时间在运行循环的布局阶段。在这个阶段,UIKit 发送 layoutSubviews向任何已标记为需要布局且位于窗口中的 View 发送消息。当各种事情发生时, View 会自动标记为需要布局,包括第一次添加到窗口层次结构时、给它一个新的 subview 时以及它的大小发生变化时。您也可以通过发送 setNeedsLayout 来手动将 View 标记为需要布局。信息。

当 View 收到 layoutSubviews消息,UIKit 已经发送 layoutSubviews到任何需要它的 View 的祖先(它的父 View 和上层 View ),并且它已经根据其自动调整掩码或自动布局约束调整了其框架,并且它自己的 subview 的框架已经根据它们的自动调整掩码或自动布局进行了调整约束。

如果 self.view已经是 UIView 的自定义子类,最好的方法是简单地覆盖 layoutSubviews在那个类(class)。将布局代码放在那里,并设置 ScrollView 的 contentSize那里。

如果您没有使用自定义子类,并且不想创建一个,那么您可以在 View Controller 的 viewWillLayoutSubviews 中进行布局。或 viewDidLayoutSubviews方法,如果您的部署目标是 iOS 5.0 或更高版本。您可能会猜到这些消息是何时发送的。 :)

在自动旋转期间,所有这些消息( layoutSubviewsviewWillLayoutSubviewsviewDidLayoutSubviews )都在自动旋转的动画 block 内发送,因此如果您使用其中一种方法进行布局,您还可以获得更改为您的布局将在自动旋转动画期间进行动画处理。

关于ios - 纵向xib调整为横向时需要改变UIScrollView contentSize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12944522/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com