mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
fix(ios): safe area memory leak on iOS 10 and older versions (#10673)
This commit is contained in:
committed by
GitHub
parent
5f8fb2c36a
commit
0eb2745589
@@ -200,20 +200,38 @@ export class IOSHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method simulates the iOS 11+ safeAreaLayoutGuide property and its constraints for older versions.
|
||||||
|
*
|
||||||
|
* @param controller
|
||||||
|
* @param owner
|
||||||
|
*/
|
||||||
static updateConstraints(controller: UIViewController, owner: View): void {
|
static updateConstraints(controller: UIViewController, owner: View): void {
|
||||||
if (!__VISIONOS__ && SDK_VERSION <= 10) {
|
if (!__VISIONOS__ && SDK_VERSION <= 10) {
|
||||||
const layoutGuide = IOSHelper.initLayoutGuide(controller);
|
if (!controller.view.safeAreaLayoutGuide) {
|
||||||
(<any>controller.view).safeAreaLayoutGuide = layoutGuide;
|
IOSHelper.initLayoutGuide(controller);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static initLayoutGuide(controller: UIViewController) {
|
/**
|
||||||
|
* This method simulates the iOS 11+ safeAreaLayoutGuide property for older versions.
|
||||||
|
*
|
||||||
|
* @param controller
|
||||||
|
*/
|
||||||
|
static initLayoutGuide(controller: UIViewController): UILayoutGuide {
|
||||||
const rootView = controller.view;
|
const rootView = controller.view;
|
||||||
const layoutGuide = UILayoutGuide.new();
|
|
||||||
rootView.addLayoutGuide(layoutGuide);
|
|
||||||
NSLayoutConstraint.activateConstraints(<any>[layoutGuide.topAnchor.constraintEqualToAnchor(controller.topLayoutGuide.bottomAnchor), layoutGuide.bottomAnchor.constraintEqualToAnchor(controller.bottomLayoutGuide.topAnchor), layoutGuide.leadingAnchor.constraintEqualToAnchor(rootView.leadingAnchor), layoutGuide.trailingAnchor.constraintEqualToAnchor(rootView.trailingAnchor)]);
|
|
||||||
|
|
||||||
return layoutGuide;
|
if (!rootView.safeAreaLayoutGuide) {
|
||||||
|
const layoutGuide = UILayoutGuide.new();
|
||||||
|
|
||||||
|
rootView.addLayoutGuide(layoutGuide);
|
||||||
|
NSLayoutConstraint.activateConstraints([layoutGuide.topAnchor.constraintEqualToAnchor(controller.topLayoutGuide.bottomAnchor), layoutGuide.bottomAnchor.constraintEqualToAnchor(controller.bottomLayoutGuide.topAnchor), layoutGuide.leadingAnchor.constraintEqualToAnchor(rootView.leadingAnchor), layoutGuide.trailingAnchor.constraintEqualToAnchor(rootView.trailingAnchor)]);
|
||||||
|
|
||||||
|
(<any>rootView).safeAreaLayoutGuide = layoutGuide;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rootView.safeAreaLayoutGuide;
|
||||||
}
|
}
|
||||||
|
|
||||||
static layoutView(controller: UIViewController, owner: View): void {
|
static layoutView(controller: UIViewController, owner: View): void {
|
||||||
|
|||||||
Reference in New Issue
Block a user