首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 依螢幕解析度動態調整 UIWebView 高度(無 Auto Layout 環境)

     編輯:程式設計綜合問答

需求背景

使用 Storyboard 但需支援 iOS 5+,無法使用 Auto Layout。希望標題列高度固定,UIWebView 高度隨螢幕解析度自動填滿剩餘空間。

程式碼實作

在建立 UIWebView 時(如 viewDidLoad 或 loadView),依螢幕框架計算 frame:

- (void)setupWebView {
    // 取得應用程式可用區域(扣除狀態列)
    CGRect webFrame = [[UIScreen mainScreen] applicationFrame]; // iOS 7 含狀態列高度
    webFrame.origin.y -= 20.0; // 若需向上延伸覆蓋狀態列區域,視設計調整

    UIWebView *webView = [[UIWebView alloc] initWithFrame:webFrame];
    webView.scalesPageToFit = YES;
    webView.autoresizesSubviews = YES;
    // 關鍵:設定自動調整遮罩,寬高隨父視圖變化
    webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    webView.backgroundColor = [UIColor clearColor];

    [self.view addSubview:webView];
}

關鍵屬性說明

  • applicationFrame:回傳扣除狀態列後的螢幕矩形(iOS 7+ 含狀態列,需自行減 20pt)。
  • autoresizingMask:Springs & Struts 機制核心,FlexibleWidth + FlexibleHeight 使視圖隨父視圖 bounds 縮放。
  • scalesPageToFit = YES:網頁內容自動縮放至視圖寬度。

進階:支援旋轉

- (void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)orientation duration:(NSTimeInterval)duration {
    CGRect newFrame = [[UIScreen mainScreen] applicationFrame];
    newFrame.origin.y -= 20.0;
    self.webView.frame = newFrame;
}

注意

  • UIWebView 已棄用(iOS 12+),新專案請改用 WKWebView,同樣適用 autoresizingMask。
  • 若使用 Storyboard,可在 Size Inspector 設定 Springs & Struts(紅色 I 字線),效果相同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved