gpt4 book ai didi

ios - 具有自动布局的 UIView 最小和最大高度

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:39:40 25 4
gpt4 key购买 nike

我有一个 View 可以在 iPhone 6 屏幕上正确显示,但需要在 iPhone 5 屏幕上滚动。我正在尝试更改一些自动布局约束以消除在后者上滚动的需要。

这是尝试直观地解释我的情况: enter image description here

前两张截图分别是iPhone 6和iPhone 5上的现有情况。第三个是我想要实现的(仅在 iPhone 5 上)。

我写了以下自动布局约束,但我在这里遗漏了一些东西:


[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=25,<=50)-[blueView]-(>=25,<=50)-[redView]-5-|"
options:0
metrics:nil
views:nameMap]];

这里应该涉及拥抱和/或抗压吗?以什么方式?


编辑以显示更多我的实际代码:

[self addSubview:loginNSignupScrollView];[self.loginNSignupScrollView addSubview:logoImageView];[self.loginNSignupScrollView addSubview:horizontalScrollView];[self.loginNSignupScrollView addSubview:appVersionLabel];[self.horizontalScrollView addSubview:loginView];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[loginNSignupScrollView]|" options:0 metrics:nil views:nameMap]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[loginView(==350)]" options:0 metrics:nil views:nameMap]];

[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=30,<=60)-[logoImageView(==35)]-(>=25,<=50)-[horizontalScrollView]-30-[appVersionLabel]-5-|" options:0 metrics:nil views:nameMap]];

[self addConstraint:[NSLayoutConstraint constraintWithItem:self.horizontalScrollView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self attribute:NSLayoutAttributeHeight multiplier:0.0 constant:350]];

最佳答案

如您所知, ScrollView 的特殊之处在于,如果您在其中使用自动布局,则内容大小(可滚动内容的大小)由内而外的约束决定。因此,你不能直接做你想做的事。更好的策略是:

  • ScrollView ,固定到父 View (主视图)

  • ScrollView 内的空白内容 View ,固定到具有零常量的 ScrollView

  • 内容 View 中的其他内容

设置好后,会发生两件好事:

  • 内容 View 的大小 ScrollView 的contentSize。所以你所要做的就是明确地设置它。一个合理的做法可能是在 viewDidLayoutSubviews 的代码中设置它;这是最早知道真正的最终接口(interface)尺寸的。

  • 内容 View 的 subview 的约束变为普通约束,根据内容 View 的大小像往常一样从外向内定位它们——正如我们刚才所说,你是明确设置。

使用那种策略,我实现了这个(分别是 4s 和 6s 模拟器),这似乎至少是你所追求的那种东西;观察我们确实处于 ScrollView 中,尽管您无法从屏幕截图中看出:

enter image description here

enter image description here

它与您的屏幕截图并不完全相同,因为我不清楚您真正想要的是什么,所以我允许空白区域平均增长/缩小,同时保持 View 高度不变;可能是您希望红色 View 高度在更大的屏幕上增长。但我认为这是一个小问题。

我使用的唯一代码是设置内容 View 的大小,这(正如我所说)与设置 ScrollView 的 contentSize 相同:

NSLayoutConstraint.activateConstraints([
self.contentView.widthAnchor.constraintEqualToConstant(
self.view.bounds.size.width),
self.contentView.heightAnchor.constraintEqualToConstant(
self.view.bounds.size.height),
])

关于ios - 具有自动布局的 UIView 最小和最大高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33696598/

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