[英]iOS UIView Not Resizing Subviews?
我正在以編程方式從故事板加載視圖,但是我的子視圖高度存在問題(我正在使用自動調整子視圖等)。
當視圖加載時,主 UIView 似乎是正確的大小,但依賴於約束來動態計算其最終高度的子視圖似乎沒有從它們在界面構建器中設置的大小調整大小。
像這樣加載視圖:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
ApplicationRecordingViewController* recordingController = (ApplicationRecordingViewController*)[storyboard instantiateViewControllerWithIdentifier:@"recordView2"];
[self presentViewController:recordingController animated:NO completion:nil];
橙色區域的高度是從主視圖頂部到灰色區域頂部。 灰色區域為固定高度
奇怪的是,如果我將界面構建器中的模擬大小設置為我手機的正確視圖,那么大小就會計算出來。 我猜子視圖的初始高度被“烘焙”到視圖中,但是然后(通常)在視圖實際加載時調整大小?
注意:橙色區域應該被我加載到其中的相機視圖完全填充。
高度不正確
如果我更改模擬布局,則正確的高度
很想知道我做錯了什么!
編輯 1:約束
相機是橙色位。 相機底部約束當前設置為視圖底部 + 足夠的灰色條空間。 還嘗試設置底部以匹配灰色條的頂部!
你已經得到了答案。
“如果我將界面構建器中的模擬尺寸設置為我手機的正確視圖,那么尺寸就會計算出來。”
您可以調用一些函數來獲取 viewDidLoad 或 viewWillAppear 中的高度。
像這樣更改代碼
- (void) viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
CGFloat height = [self getHeight];
}
或者
- (void) viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
CGFloat height = [self getHeight];
}
正如我在您的故事板約束中看到的,您已將底部空間設置為底部布局指南 150 。 我認為這就是問題所在。 如果您為底部視圖提供固定高度,則無需從底部布局指南 --> 150 設置常量。
你的舊約束:->
只需從greenview = 0設置orangeview的底部空間。
檢查新的約束,
這是你的故事板鏈接,
這是你的輸出,
在對布局進行了更多調查后,我發現相機視圖(橙色)似乎是正確的尺寸,但實時相機預覽卻不是。
解決方案是將相機庫( SCRecorder )的 init 方法移動到 viewDidAppear (之前在 viewDidLoad 中)。
我的想法是 iOS 不會以與普通 UIViews 等相同的方式自動布局相機預覽視圖。
@interface ApplicationRecordingViewController () {
SCRecorder *_recorder;
}
@end
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
_recorder.previewView = _previewView;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.