mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
add listview support for safe area
This commit is contained in:
@@ -9,7 +9,7 @@ const majorVersion = iosUtils.MajorVersion;
|
||||
|
||||
export class LayoutBase extends LayoutBaseCommon {
|
||||
nativeViewProtected: UIView;
|
||||
|
||||
|
||||
public addChild(child: View): void {
|
||||
super.addChild(child);
|
||||
this.requestLayout();
|
||||
@@ -35,26 +35,28 @@ export class LayoutBase extends LayoutBaseCommon {
|
||||
|
||||
public _setNativeViewFrame(nativeView: UIView, frame: CGRect) {
|
||||
// if (!CGRectEqualToRect(nativeView.frame, frame)) {
|
||||
// if (traceEnabled()) {
|
||||
// traceWrite(this + ", Native setFrame: = " + NSStringFromCGRect(frame), traceCategories.Layout);
|
||||
// }
|
||||
// this._cachedFrame = frame;
|
||||
// if (this._hasTransfrom) {
|
||||
// // Always set identity transform before setting frame;
|
||||
// const transform = nativeView.transform;
|
||||
// nativeView.transform = CGAffineTransformIdentity;
|
||||
// nativeView.frame = frame;
|
||||
// nativeView.transform = transform;
|
||||
// }
|
||||
// else {
|
||||
// nativeView.frame = frame;
|
||||
// }
|
||||
// if (traceEnabled()) {
|
||||
// traceWrite(this + ", Native setFrame: = " + NSStringFromCGRect(frame), traceCategories.Layout);
|
||||
// }
|
||||
// this._cachedFrame = frame;
|
||||
// if (this._hasTransfrom) {
|
||||
// // Always set identity transform before setting frame;
|
||||
// const transform = nativeView.transform;
|
||||
// nativeView.transform = CGAffineTransformIdentity;
|
||||
// nativeView.frame = frame;
|
||||
// nativeView.transform = transform;
|
||||
// }
|
||||
// else {
|
||||
// nativeView.frame = frame;
|
||||
// }
|
||||
|
||||
nativeView.frame = frame;
|
||||
nativeView.frame = frame;
|
||||
const locationOnScreen = this.getLocationInWindow();
|
||||
|
||||
if (locationOnScreen) {
|
||||
|
||||
const safeArea = this.getSafeArea();
|
||||
const fullscreen = this.getFullscreenArea();
|
||||
const locationOnScreen = this.getLocationInWindow();
|
||||
const onScreenLeft = layout.toDevicePixels(layout.round(locationOnScreen.x));
|
||||
const onScreenTop = layout.toDevicePixels(layout.round(locationOnScreen.y));
|
||||
|
||||
@@ -90,6 +92,7 @@ export class LayoutBase extends LayoutBaseCommon {
|
||||
const frameNew = CGRectMake(layout.toDeviceIndependentPixels(newLeft), layout.toDeviceIndependentPixels(newTop), layout.toDeviceIndependentPixels(newWidth), layout.toDeviceIndependentPixels(newHeight));
|
||||
nativeView.frame = frameNew;
|
||||
}
|
||||
}
|
||||
|
||||
// if (leftInset || topInset) {
|
||||
// const frameNew = CGRectMake(layout.toDeviceIndependentPixels(left), layout.toDeviceIndependentPixels(top), layout.toDeviceIndependentPixels(right - left + leftInset), layout.toDeviceIndependentPixels(bottom - top + topInset));
|
||||
@@ -98,14 +101,14 @@ export class LayoutBase extends LayoutBaseCommon {
|
||||
// nativeView.bounds = CGRectMake(boundsOrigin.x, boundsOrigin.y, frameNew.size.width, frameNew.size.height);
|
||||
// }
|
||||
// else {
|
||||
const boundsOrigin = nativeView.bounds.origin;
|
||||
nativeView.bounds = CGRectMake(boundsOrigin.x, boundsOrigin.y, nativeView.frame.size.width, nativeView.frame.size.height);
|
||||
const boundsOrigin = nativeView.bounds.origin;
|
||||
nativeView.bounds = CGRectMake(boundsOrigin.x, boundsOrigin.y, nativeView.frame.size.width, nativeView.frame.size.height);
|
||||
// }
|
||||
// }
|
||||
|
||||
return nativeView.frame;
|
||||
// }
|
||||
|
||||
return nativeView.frame;
|
||||
}
|
||||
|
||||
|
||||
[clipToBoundsProperty.getDefault](): boolean {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ import { StackLayout } from "../layouts/stack-layout";
|
||||
import { ProxyViewContainer } from "../proxy-view-container";
|
||||
import { profile } from "../../profiling";
|
||||
import * as trace from "../../trace";
|
||||
import { ios as iosUtils } from "../../utils/utils";
|
||||
|
||||
export * from "./list-view-common";
|
||||
|
||||
@@ -22,6 +23,7 @@ interface ViewItemIndex {
|
||||
}
|
||||
|
||||
type ItemView = View & ViewItemIndex;
|
||||
const majorVersion = iosUtils.MajorVersion;
|
||||
|
||||
class ListViewCell extends UITableViewCell {
|
||||
public static initWithEmptyBackground(): ListViewCell {
|
||||
@@ -378,6 +380,81 @@ export class ListView extends ListViewBase {
|
||||
});
|
||||
}
|
||||
|
||||
public _setNativeViewFrame(nativeView: UIView, frame: CGRect) {
|
||||
// if (!CGRectEqualToRect(nativeView.frame, frame)) {
|
||||
// if (traceEnabled()) {
|
||||
// traceWrite(this + ", Native setFrame: = " + NSStringFromCGRect(frame), traceCategories.Layout);
|
||||
// }
|
||||
// this._cachedFrame = frame;
|
||||
// if (this._hasTransfrom) {
|
||||
// // Always set identity transform before setting frame;
|
||||
// const transform = nativeView.transform;
|
||||
// nativeView.transform = CGAffineTransformIdentity;
|
||||
// nativeView.frame = frame;
|
||||
// nativeView.transform = transform;
|
||||
// }
|
||||
// else {
|
||||
// nativeView.frame = frame;
|
||||
// }
|
||||
|
||||
nativeView.frame = frame;
|
||||
|
||||
const safeArea = this.getSafeArea();
|
||||
const fullscreen = this.getFullscreenArea();
|
||||
const locationOnScreen = this.getLocationInWindow();
|
||||
const onScreenLeft = layout.toDevicePixels(layout.round(locationOnScreen.x));
|
||||
const onScreenTop = layout.toDevicePixels(layout.round(locationOnScreen.y));
|
||||
|
||||
let left = layout.toDevicePixels(frame.origin.x);
|
||||
let top = layout.toDevicePixels(frame.origin.y);
|
||||
let width = layout.toDevicePixels(frame.size.width);
|
||||
let height = layout.toDevicePixels(frame.size.height);
|
||||
|
||||
if (majorVersion > 10) {
|
||||
// this._ios.insetsContentViewsToSafeArea = false;
|
||||
|
||||
let newLeft = left;
|
||||
let newTop = top;
|
||||
let newWidth = width;
|
||||
let newHeight = height;
|
||||
|
||||
if (left !== 0 && onScreenLeft <= layout.toDevicePixels(safeArea.origin.x)) {
|
||||
newLeft = layout.toDevicePixels(fullscreen.origin.x);
|
||||
newWidth = width + onScreenLeft;
|
||||
}
|
||||
|
||||
if (top !== 0 && onScreenTop <= layout.toDevicePixels(safeArea.origin.y)) {
|
||||
newTop = layout.toDevicePixels(fullscreen.origin.y);
|
||||
newHeight = height + onScreenTop;
|
||||
}
|
||||
|
||||
if (width && width < layout.toDevicePixels(fullscreen.size.width) && onScreenLeft + width >= layout.toDevicePixels(safeArea.origin.x) + layout.toDevicePixels(safeArea.size.width)) {
|
||||
newWidth = newWidth + (layout.toDevicePixels(fullscreen.size.width) - (onScreenLeft + width));
|
||||
}
|
||||
|
||||
if (height && height < layout.toDevicePixels(fullscreen.size.height) && onScreenTop + height >= layout.toDevicePixels(safeArea.origin.y) + layout.toDevicePixels(safeArea.size.height)) {
|
||||
newHeight = newHeight + (layout.toDevicePixels(fullscreen.size.height) - (onScreenTop + height));
|
||||
}
|
||||
|
||||
const frameNew = CGRectMake(layout.toDeviceIndependentPixels(newLeft), layout.toDeviceIndependentPixels(newTop), layout.toDeviceIndependentPixels(newWidth), layout.toDeviceIndependentPixels(newHeight));
|
||||
nativeView.frame = frameNew;
|
||||
}
|
||||
|
||||
// if (leftInset || topInset) {
|
||||
// const frameNew = CGRectMake(layout.toDeviceIndependentPixels(left), layout.toDeviceIndependentPixels(top), layout.toDeviceIndependentPixels(right - left + leftInset), layout.toDeviceIndependentPixels(bottom - top + topInset));
|
||||
// nativeView.frame = frameNew;
|
||||
// const boundsOrigin = nativeView.bounds.origin;
|
||||
// nativeView.bounds = CGRectMake(boundsOrigin.x, boundsOrigin.y, frameNew.size.width, frameNew.size.height);
|
||||
// }
|
||||
// else {
|
||||
const boundsOrigin = nativeView.bounds.origin;
|
||||
nativeView.bounds = CGRectMake(boundsOrigin.x, boundsOrigin.y, nativeView.frame.size.width, nativeView.frame.size.height);
|
||||
// }
|
||||
// }
|
||||
|
||||
return nativeView.frame;
|
||||
}
|
||||
|
||||
private _layoutCell(cellView: View, indexPath: NSIndexPath): number {
|
||||
if (cellView) {
|
||||
const rowHeight = this._effectiveRowHeight;
|
||||
|
||||
Reference in New Issue
Block a user