XE8 實現 iOS 狀態欄的幾種效果:
一、狀態欄底色:
- 開一個新工程。
- 設定 Fill.Color 顏色屬性。
- 設定 Fill.Kind = Solid。
- 無需修改任何官方源碼。
二、隱藏狀態欄(全屏):
- 開一個新工程。
- 設定 BorderStyoe = None。
- 無需修改任何官方源碼。
三、透明狀態欄(能見底圖):
- 開一個新工程。
- 設定底圖 Fill.Bitmap.Bitmap
- 設定 Fill.Bitmap.WrapMode = TitleStretch
- 設定 Fill.Kind = Bitmap
- 設定 FullScreen = True
- 設定 BorderStyle = ToolWindows。(利用修改源碼,讓指定為 ToolWindows 來顯示透明效果)
- 需修改源碼 FMX.Platform.iOS.pas
支持 iOS 5.x
與上述做法相同,只需再多加一個設定:
Project > Options > Version Info (在表格上按鼠標右鍵來增加)
Key | Value |
UIStatusBarStyle | UIStatusBarStyleBlackTranslucent |
修改方法:
請將源碼 FMX.Platform.iOS.pas 復制到自己的工程目錄里,再進行修改。
找到 TPlatformCocoaTouch.CalculateFormViewFrame 加入下面代碼:
function TPlatformCocoaTouch.CalculateFormViewFrame(const AForm: TCommonCustomForm): NSRect; var Orientation: NSUInteger; StatusBarHeight: Single; Tmp: Single; begin if IsPopupForm(AForm) then Result := CGRectMake(AForm.Left, AForm.Top, AForm.Width, AForm.Height) else begin Result := FMainScreen.bounds; StatusBarHeight := 0; {+++>} // 加入下面代碼 if AForm.BorderStyle = TFmxFormBorderStyle.ToolWindow then begin StatusBarHeight := 0; FStatusBarHeight := 0; Result.origin := CGPointMake(0, 0); end else {<+++} // 加入上面代碼 if AForm.BorderStyle <> TFmxFormBorderStyle.None then begin ... 略 ... end;
狀態欄下方線 (2015/12/15 補充):
目前在某些真機的狀態欄下方會顯示一條線,見下圖:
實測有線:iPhone 6s Plus (只有真機才看的到),(其它皆無此線,如:iPad mini 2, iPhone 4, iPhone 4s)
問題造成原因:不清楚,猜測應該是 Delphi 的問題(如果在意此問題,請自行去提交 QC)。
暫時解決方案:
- 將 Form.Transparency 設為 True
- 放一個 TRectangle 到 Form 里
- Rectangle1.Align 設為 Contents
- Rectangle1.Stroke.Kind 設為 None
- Rectangle1.Fill.Color 設為 $FFFEFEFE
- Rectangle1.HitTest 設為 False
- 設定好以上,發布到真機,狀態欄下方的線就看不見了。