gpt4 book ai didi

ios - UIView 宽度和高度不适应约束

转载 作者:行者123 更新时间:2023-11-29 02:12:42 28 4
gpt4 key购买 nike

这是一个关于 iOS、XCode、自动布局和 Objective-C 的问题。我觉得它有一个简单的答案,但我在 SO 中进行了大量搜索,但找不到解决方案。

我想在 Google map 的中心放置一个小十字线图像,以便当用户在 map 上平移时,图像保持固定。为此,我只需将 UIImageView 作为 subview 添加到 Google map View ,该 View 是我制作的 IBOutlet self.mapView 的 GMSMapView。

我使用以下方法计算放置图像的位置:

crosshairs.center = CGPointMake(self.mapView.bounds.size.width / 2, self.mapView.bounds.size.height / 2);

同时,我对 map View 设置了约束,以便其前导和尾随空格与 super View Hook 。这应该使它的宽度和高度具有流动性——至少我是这么认为的。

事实上,当我在运行时 NSLog map View 的宽度和高度时,它们反射(reflect)了 Xcode 中的尺寸检查器中指定的宽度 (600) 和高度 (384)——即使我没有固定宽度高度也不受限制。

结果是图像不是以屏幕为中心,而是以 map View 的错误宽度和高度(延伸到屏幕外)为中心。

我知道我忽略了一些愚蠢的事情,或者我错过了自动布局的基本概念。无论哪种方式,我都会感谢任何指导。

最佳答案

使用自动布局时最重要的是,您不应该再手动更改框架(在您的情况下使用 setCenter:)。您应该使用约束来布局所有内容。

您可以在 mapView 顶部的 Storyboard中添加 UIImage 并使用约束将其居中。

如果那不可能,您还可以使用如下代码在代码中添加约束:

[self.mapView addSubview:crosshairs];
[crosshairs setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.mapView addConstraints:[NSLayoutConstraint constraintWithItem:self.mapView attribute:NSLayoutAttributeCenterY relatedBy:NSLayoutRelationEqual toItem:crosshairs attribute:NSLayoutAttributeCenterY multiplier:1.0 constant:0]];
[self.mapView addConstraints:[NSLayoutConstraint constraintWithItem:self.mapView attribute:NSLayoutAttributeCenterX relatedBy:NSLayoutRelationEqual toItem:crosshairs attribute:NSLayoutAttributeCenterX multiplier:1.0 constant:0]];

根据添加这些约束的位置,您可能必须调用 [self.mapView layoutIfNeeded];

使用约束,图像应该始终在 mapView 的顶部居中。

关于 mapView 的错误框架,这取决于您在哪里记录它。如果您的 IBOutletUIViewController 中,您应该在 [super viewWillLayoutSubviews]; 之后的 viewWillLayoutSubviews: 中执行此操作称呼。

- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
NSLog(@"Map View frame %@", NSStringFromCGRect(self.mapView.frame));
}

如果您在自定义 UIView 类中有它,您应该检查 layoutSubviews: 中的框架

- (void)layoutSubviews {
[super layoutSubviews];
NSLog(@"Map View frame %@", NSStringFromCGRect(self.mapView.frame));
}

希望这能解决您的问题。

关于ios - UIView 宽度和高度不适应约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29109541/

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