簡體   English   中英

iOS UIView 不調整子視圖大小?

[英]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:約束

相機是橙色位。 相機底部約束當前設置為視圖底部 + 足夠的灰色條空間。 還嘗試設置底部以匹配灰色條的頂部!

約束

限制條件 2

使用場景鏈接到情節提要

我知道你們都比我好,但我在上一個項目中經歷了同樣的事情。 我在 UIView 中的 Camera View 不是全屏顯示或調整大小和適合整個 UIView,我也在我的每日博客上發布了它

實現 viewDidLayoutSubviews -- 在該方法中,再次布局您的視頻預覽層。不要在該方法內分配初始化任何內容,只需重新布局您的視圖。 之后,您的視頻預覽將填充其父級或您一直定位的任何內容的高度和寬度。

該問題還與約束和視圖的層次結構有關。

在此處輸入圖片說明

你已經得到了答案。

“如果我將界面構建器中的模擬尺寸設置為我手機的正確視圖,那么尺寸就會計算出來。”

您可以調用一些函數來獲取 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM