gpt4 book ai didi

ios - 如何使用自动布局创建三个 View ,一个固定宽度高度,另外两个高度增长

转载 作者:行者123 更新时间:2023-11-29 12:08:44 24 4
gpt4 key购买 nike

我正在尝试创建一个垂直 View 设置,其中我在顶部有一个 UIView(固定宽度、高度)和两个 UILabel(固定宽度、动态高度) ) 在底部。 View (aView) 周围的填充是 5。_mylabel 周围的填充是 5。leftright 的填充_yourLable 的 code> 为 5。_yourLable 将根据文本增长,但当文本内容太大时,它会停止增长以保持 superview 的填充为 5 .

这是我尝试过的:

- (void)viewDidLoad {
[super viewDidLoad];

UIView *superview = self.view;

UIView *aView = [UIView new];
[aView setBackgroundColor:[UIColor blackColor]];
[aView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:aView];

_mylabel = [[UILabel alloc]init];
[_mylabel setNumberOfLines:0];
[_mylabel setBackgroundColor:[UIColor redColor]];
[_mylabel setTranslatesAutoresizingMaskIntoConstraints:NO];
_mylabel.text = @"i am trying to create a view setup vertically where i have one UIView(fix width, height) at top and other two UILables(fix width, dynamic height) at bottom respectively. Padding on allaround of view/lables is 5. this is what i have tried:";
[self.view addSubview:_mylabel];

_yourLable = [[UILabel alloc]init];
[_yourLable setNumberOfLines:0];
[_yourLable setBackgroundColor:[UIColor redColor]];
[_yourLable setTranslatesAutoresizingMaskIntoConstraints:NO];
_yourLable.text = @"i am trying to create a view setup vertically where i have one UIView(fix width, height) at top and other two UILables(fix width, dynamic height) at bottom respectively. Padding on allaround of view/lables is 5. this is what i have tried:";
[self.view addSubview:_yourLable];

NSDictionary * views = NSDictionaryOfVariableBindings(aView,_mylabel, _yourLable, superview);

NSArray * heightConstraintforLabel = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[aView(==200)]-5-[_mylabel]-5-[_yourLable]-5-|" options:0 metrics:nil views:views];
NSArray * widthConstraintforView = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[aView]-5-|" options:0 metrics:nil views:views];

NSArray * widthConstraintformylabel = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_mylabel]-5-|" options:0 metrics:nil views:views];

NSArray * widthConstraintforyourLable = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[_yourLable]-5-|" options:0 metrics:nil views:views];

[superview addConstraints:heightConstraintforLabel];
[superview addConstraints:widthConstraintforView];

[superview addConstraints:widthConstraintformylabel];

[superview addConstraints:widthConstraintforyourLable];
}

-(void)viewWillLayoutSubviews{
[super viewWillLayoutSubviews];
// Your layout logic here

CGFloat availableLabelWidth = _mylabel.frame.size.width;
_mylabel.preferredMaxLayoutWidth = availableLabelWidth;

availableLabelWidth = _yourLable.frame.size.width;
_yourLable.preferredMaxLayoutWidth = availableLabelWidth;
}

这是我得到的,没有警告:

this is what output looks like

我希望两个标签都根据准确的文本高度调整大小。我希望最后一个红色标签按照其中写入的文本增长,但永远不要超过 5 的底部空间。也就是说它应该增长但保持底部填充为 5。

我已经尝试过各种与标签垂直内容压缩的组合...,但没有得到确切的解决方案。

帮助:)

最佳答案

以防万一你没有设置优先级,使用

[_mylabel setContentCompressionResistancePriority:751 forAxis:UILayoutConstraintAxisVertical];
[_mylabel setContentHuggingPriority:252 forAxis:UILayoutConstraintAxisVertical];

您不需要为 _yourLable 设置任何优先级。

并且您不需要为 viewWillLayoutSubviews 中的任何标签设置 preferredMaxLayoutWidth,因此您不需要覆盖 viewWillLayoutSubviews。您可以评论整个方法。

已在 iOS 7 和 iOS 9 设备上验证。

模拟器截图是这样的,

enter image description here

关于ios - 如何使用自动布局创建三个 View ,一个固定宽度高度,另外两个高度增长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34158905/

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