gpt4 book ai didi

ios - 如何使用自动布局为纵向和横向配置不同的布局?

转载 作者:可可西里 更新时间:2023-11-01 03:54:33 26 4
gpt4 key购买 nike

我有一个 View ,如附图所示

enter image description here

现在我正在添加约束,以便当方向更改为横向时, View 中的 UITextview 必须位于屏幕的右侧。在 UItextview 上,我添加了以下约束,

  1. 到 : Superview 的尾随空格
  2. 底部空间到:Superview

这些约束虽然显示了一些关于歧义的警告,但对我来说是有用的。下面是横屏模式的截图。

enter image description here

我的问题是,虽然 UItextview 移到了右侧,但我想在横向模式下从 superview 的顶部增加一些宽度。换句话说,我希望 UITextview 从它现在处于横向模式的位置向下移动一点。我正在考虑如何使用 IB 中的自动布局来做到这一点,但我不知道该怎么做。

请提出任何建议。

最佳答案

您可以通过多种方式使用约束来执行此操作,但无法仅使用您在 IB 中设置的约束来自动执行此操作。通过在方法 constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant: 中同时使用乘数和常量值,您可以拥有一个在纵向和横向中计算不同距离的约束。通过计算找出这些值的用途是一件很痛苦的事情,所以我在 NSLayoutConstraint 上写了一个类别来做到这一点。这些方法之一的示例是:

+(NSLayoutConstraint *)topConstraintForView:(UIView *)subview viewAttribute:(NSLayoutAttribute) att superview:(UIView *)superview portraitValue:(CGFloat)pValue landscapeValue:(CGFloat)lValue {
CGFloat multiplier = (pValue - lValue)/(superview.bounds.size.height - superview.bounds.size.width);
CGFloat constant = pValue - (superview.bounds.size.height * multiplier);
NSLayoutConstraint *con = [NSLayoutConstraint constraintWithItem:subview attribute:att relatedBy:0 toItem:superview attribute:NSLayoutAttributeBottom multiplier:multiplier constant:constant];
NSLog(@"top coeffs: %f %f",multiplier,constant);
return con;
}

你使用这些的方法是在 Storyboard中添加起始纵向约束,但在约束的属性检查器中选中“占位符 - 在构建时删除”框,然后在 viewDidLoad 中替换它,就像这样:

- (void)viewDidLoad {
[super viewDidLoad];
[self.view addConstraint:[NSLayoutConstraint topConstraintForView:self.textView viewAttribute:NSLayoutAttributeTop superview:self.view portraitValue:225 landscapeValue:50]];
}

这将根据设备的旋转自动调整 TextView 的位置,无需任何其他代码。您可能必须更改文本字段的宽度以使所有内容都适合——我将它们和“获取”标签包含在一个 View 中,以便更轻松地将它们定位为一个组。该 View 和 TextView 具有高度和宽度约束, View 的顶部和左侧以及 TextView 的顶部和右侧。该类别也有调整其他约束的方法,可以在 http://jmp.sh/b/S4exMJBWftlCeO5GybNO 找到。 .

另一种方法是使 IBOutlets 符合您在 IB 中所做的约束,并在其中一个旋转回调方法中调整它们(常量值),或删除一些并重新制作其他一些。

关于ios - 如何使用自动布局为纵向和横向配置不同的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20683698/

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