gpt4 book ai didi

objective-c - 无法获取 UIImageView 并使用自动布局填充父 UIView

转载 作者:搜寻专家 更新时间:2023-10-30 20:02:30 43 4
gpt4 key购买 nike

我正在尝试使用自动布局用 UIImageView 填充 UIView。我已经尝试了几件事,但最明显的是,只有当我在“模拟指标”中设置正确的大小时,父 View 的 equalSize 才有效。如果我让 Freeform(自动布局的意义不是吗?)我会搞砸。

我正在 iPhone 4S 和 6 plus 上进行测试。

感谢任何领先的轨道。

编辑@mittens

enter image description here

enter image description here

我看到了你的编辑。我仍然可以让它工作。如您所见,我有 4 个边距约束,与您的代码中的相同(我不需要其余部分,因为我只使用主 UIView)。无论如何,当我在 xcode 上更改大小时,布局是完美的,当我将它发送到我的 4S 时,我只得到顶部和左边距。

最佳答案

我会仔细检查您尝试用 UIImageView 填充的 UIView 上的约束,以确保它按应有的方式填充其父 View 当 Storyboard/xib 设置为自由格式时。此外,如果您以编程方式添加/创建 View ,请仔细检查 View “translatesAutoresizingMaskIntoConstraints设置为NO”。这总是让我失望。

我制作了一个 super 快速的 View ,并向 View Controller View 和 ImageView 中的 View 添加了一些约束,以展示一种实现方式——希望它至少能有所帮助

- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.backdropView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
self.backdropView.backgroundColor = [UIColor colorWithRed:0 green:1 blue:0 alpha:0.5];
self.backdropView.translatesAutoresizingMaskIntoConstraints = NO; // Make sure this is set to NO if the view is being added programmatically
[self.view addSubview:self.backdropView]; // Always add the view into the hierarchy _before_ constraints are added (again, if creating & adding programmatically)

NSLayoutConstraint *backdropViewWidth = [NSLayoutConstraint constraintWithItem:self.backdropView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:self.backdropView.superview attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0];
NSLayoutConstraint *backdropViewHeight = [NSLayoutConstraint constraintWithItem:self.backdropView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:self.backdropView.superview attribute:NSLayoutAttributeHeight multiplier:0.5 constant:0];
NSLayoutConstraint *backdropViewCenterX = [NSLayoutConstraint constraintWithItem:self.backdropView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:self.backdropView.superview attribute:NSLayoutAttributeCenterX multiplier:1 constant:0];
NSLayoutConstraint *backdropViewCenterY = [NSLayoutConstraint constraintWithItem:self.backdropView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:self.backdropView.superview attribute:NSLayoutAttributeCenterY multiplier:1 constant:0];

[self.backdropView.superview addConstraints:@[backdropViewWidth, backdropViewHeight, backdropViewCenterY, backdropViewCenterX]];

self.imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 40, 40)];
self.imageView.translatesAutoresizingMaskIntoConstraints = NO;
self.imageView.backgroundColor = [UIColor colorWithRed:1 green:0 blue:1 alpha:0.5];
[self.backdropView addSubview:self.imageView];

NSLayoutConstraint *imageViewTop = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.imageView.superview attribute:NSLayoutAttributeTop multiplier:1 constant:8];
NSLayoutConstraint *imageViewLeft = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.imageView.superview attribute:NSLayoutAttributeLeft multiplier:1 constant:8];
NSLayoutConstraint *imageViewRight = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.imageView.superview attribute:NSLayoutAttributeRight multiplier:1 constant:-8];
NSLayoutConstraint *imageViewBottom = [NSLayoutConstraint constraintWithItem:self.imageView attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.imageView.superview attribute:NSLayoutAttributeBottom multiplier:1 constant:-8];

[self.imageView.superview addConstraints:@[imageViewTop, imageViewLeft, imageViewRight, imageViewBottom]];

[self.view layoutIfNeeded];
}

产生 View in Portrait in iPhone6 simulatorView in Landscape in iPhone6 simulator

同样,希望这对您有所帮助。

编辑:如何在 Storyboard中添加它们

请注意照片 3,我选择了我想要约束的 View ,然后 shift 选择了我想要将其约束的 View 。所以我选择了内部 UIView(因为它的宽度/高度将被限制到父 View )然后 shift 选择它的父 View (它嵌套在其中的 View )到启用 Equal WidthEqual Height

选项

向嵌套在 UIView 中的 UIImageView 添加约束 Add constraints to UIImageView nested inside the UIView在其父 View 中居中 UIView Center UIView inside its parent view添加等于父级的宽度/高度约束 -- 注意:我选择了我想要约束的 View ,然后 shift 选择了我想要将其约束的 View 。所以我选择了内部 UIView(因为它的宽度/高度将被限制到父 View )然后 shift 选择它的父 View (它嵌套在其中的 View )到启用 Equal WidthEqual Height 选项 Add width/height constraints equal to parent将约束中的乘数更改为您想要的任何值,在本例中为 0.5 Change multiplier in constraint to be whatever you want, 0.5 in this case庆祝 Celebrate

关于objective-c - 无法获取 UIImageView 并使用自动布局填充父 UIView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26317636/

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