[英]UIView width & height not adjusting to constraints
這是有關iOS,XCode,自動版式和Objective-C的問題。 我覺得它有一個簡單的答案,但我在SO中搜索過高而又低,因此找不到解決方案。
我想在Google地圖的中心放置一個較小的十字線圖像,以便在用戶平移地圖時,圖像保持固定。 為此,我只需將UIImageView作為子視圖添加到Google Map視圖中,該視圖就是我創建的IBOutlet的GMSMapView self.mapView。
我使用以下方法計算放置圖像的位置:
crosshairs.center = CGPointMake(self.mapView.bounds.size.width / 2, self.mapView.bounds.size.height / 2);
同時,我在地圖視圖上設置了約束,以使其前導和尾隨空間與超級視圖掛鈎。 那應該使它的寬度和高度成為液體-或我想。
實際上,當我在運行時使用NSLog記錄地圖視圖的寬度和高度時,它們會反映Xcode的大小檢查器中指定的寬度(600)和高度(384)-即使我沒有用限制。
結果是圖像不是居中放置在屏幕上,而是居中放置在地圖視圖的錯誤的寬度和高度(它們延伸到屏幕之外)的中心。
我知道我忽略了一些愚蠢的事情,或者我錯過了自動版式的基本概念。 無論哪種方式,我都會感謝您的指導。
將
使用自動布局時,重要的是您不再需要手動更改框架(在您的情況下使用setCenter:
。 您應該使用約束來布局所有內容。
您可以使用約束將UIImage
添加到mapView頂部的情節提要中,並在其中居中。
如果這不可能,那么您還可以使用以下類似的方法在代碼中添加約束:
[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的框架錯誤,這取決於您在哪里記錄。 如果您的IBOutlet
在UIViewController
,則應該在viewWillLayoutSubviews:
[super viewWillLayoutSubviews];
呼叫。
- (void)viewWillLayoutSubviews {
[super viewWillLayoutSubviews];
NSLog(@"Map View frame %@", NSStringFromCGRect(self.mapView.frame));
}
如果您在自定義UIView
類中擁有它,則應檢查layoutSubviews:
的框架layoutSubviews:
- (void)layoutSubviews {
[super layoutSubviews];
NSLog(@"Map View frame %@", NSStringFromCGRect(self.mapView.frame));
}
希望這可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.