gpt4 book ai didi

ios - AutoLayout UIScrollView 内容在旋转时不调整大小(包括示例项目)

转载 作者:可可西里 更新时间:2023-11-01 04:21:09 26 4
gpt4 key购买 nike

我正在努力了解 AutoLayout 的工作原理,我想我了解其中的大部分内容,但 UIScrollViews 除外。当我将这些 View 添加到项目中时,它们拒绝扩展屏幕的尺寸。它们在 iPhone 垂直 View 中会很好地显示,但在旋转时它们不会展开。此外,当您在 iPad 模拟器中启动项目时,UIScrollView 屏幕不会扩展到 iPad 的尺寸。实际的 UIScrollView 会展开,但它的内容不会展开。

我已按照 Apple (https://developer.apple.com/library/ios/technotes/tn2154/_index.html) 的说明进行操作,虽然这解决了我的动态内容高度问题,但并未解决 UIScrollView 内容未展开以匹配屏幕宽度的问题。我读过我需要将 ScrollView 的内部子项固定到 UIView 的右边缘,但这似乎有点乱七八糟,而且似乎也与上​​述 Apple 文档相矛盾。

这是我所拥有的:

  • UI,因此主视图是在 nib 中创建的。
  • 该 View 是一个普通的 UIView。不是 UIScrollView
  • 创建UIScrollView并添加到viewDidLoad
  • 所有动态内容都在nib中绘制,并存储在一个单独的UIView名称contentView中
  • contentView在viewDidLoad中添加到scrollView
  • 在 viewDidLoad 中添加约束,将 scrollView 和 contentView 固定到它们的 superView 的边缘。

来自 viewDidLoad 的代码:

- (void)viewDidLoad
{
[super viewDidLoad];

UIView* contentView = self.contentView;

UIScrollView * scrollView = [[UIScrollView alloc] init];

[self.view addSubview:scrollView];
[scrollView addSubview:contentView];

//remove auto contraints
[scrollView setTranslatesAutoresizingMaskIntoConstraints:NO];
[contentView setTranslatesAutoresizingMaskIntoConstraints:NO];

// Set the constraints for the scroll view and the image view.
NSDictionary* viewsDictionary = NSDictionaryOfVariableBindings(scrollView, contentView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: nil views:@{@"scrollView":scrollView}]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: nil views:@{@"scrollView":scrollView}]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options:0 metrics: nil views:viewsDictionary]];
[scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|" options:0 metrics: nil views:viewsDictionary]];

}

您可以从这里下载示例项目:TestAutoLayout.zip

有没有人知道为什么尽管添加了约束,但 scrollView 内容没有扩展到 self.view 的宽度?

最佳答案

如本答案中所述:https://stackoverflow.com/a/16843937/950953 ,将 contentView 链接到主视图的宽度似乎是唯一可行的方法。

我用这部分代码修改了上面的约束代码,现在屏幕布局正确。

UIView *mainView = self.view;

// Set the constraints for the scroll view and the image view.
NSDictionary* viewsDictionary = NSDictionaryOfVariableBindings(scrollView, contentView, mainView);
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[contentView]|" options:0 metrics: 0 views:viewsDictionary]];
[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[contentView]|" options:0 metrics: 0 views:viewsDictionary]];

//hack to tie contentView width to the width of the screen
[mainView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[contentView(==mainView)]" options:0 metrics:0 views:viewsDictionary]];

如果有人能找到合适的解决方案,请发布。

关于ios - AutoLayout UIScrollView 内容在旋转时不调整大小(包括示例项目),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806378/

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