mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-11-05 13:26:48 +08:00
Merge pull request #839 from NativeScript/hhristov/page-background
Page background now spans under ActionBar
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
"version": "1.5.0-beta",
|
"version": "1.5.0-beta",
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
|
"moduleResolution": "classic",
|
||||||
"target": "es5",
|
"target": "es5",
|
||||||
"module": "commonjs",
|
"module": "commonjs",
|
||||||
"declaration": false,
|
"declaration": false,
|
||||||
|
|||||||
@@ -341,7 +341,7 @@ export class Frame extends view.CustomLayoutView implements definition.Frame {
|
|||||||
return "Frame<" + this._domId + ">";
|
return "Frame<" + this._domId + ">";
|
||||||
}
|
}
|
||||||
|
|
||||||
protected get navigationBarHeight(): number {
|
public get navigationBarHeight(): number {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
ui/frame/frame.d.ts
vendored
1
ui/frame/frame.d.ts
vendored
@@ -88,6 +88,7 @@ declare module "ui/frame" {
|
|||||||
ios: iOSFrame;
|
ios: iOSFrame;
|
||||||
|
|
||||||
//@private
|
//@private
|
||||||
|
navigationBarHeight: number;
|
||||||
_processNavigationQueue(page: pages.Page);
|
_processNavigationQueue(page: pages.Page);
|
||||||
_updateActionBar(page?: pages.Page);
|
_updateActionBar(page?: pages.Page);
|
||||||
//@endprivate
|
//@endprivate
|
||||||
|
|||||||
@@ -192,9 +192,9 @@ export class Frame extends frameCommon.Frame {
|
|||||||
var height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
|
var height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
|
||||||
var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
|
var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
|
||||||
|
|
||||||
var result = view.View.measureChild(this, this.currentPage, widthMeasureSpec, utils.layout.makeMeasureSpec(height - this.navigationBarHeight, heightMode));
|
var result = view.View.measureChild(this, this.currentPage, widthMeasureSpec, heightMeasureSpec);
|
||||||
if (this._navigateToEntry) {
|
if (this._navigateToEntry && this.currentPage) {
|
||||||
view.View.measureChild(this, this._navigateToEntry.resolvedPage, widthMeasureSpec, utils.layout.makeMeasureSpec(height - this.navigationBarHeight, heightMode));
|
view.View.measureChild(this, this._navigateToEntry.resolvedPage, widthMeasureSpec, heightMeasureSpec);
|
||||||
}
|
}
|
||||||
|
|
||||||
var widthAndState = view.View.resolveSizeAndState(result.measuredWidth, width, widthMode, 0);
|
var widthAndState = view.View.resolveSizeAndState(result.measuredWidth, width, widthMode, 0);
|
||||||
@@ -204,13 +204,13 @@ export class Frame extends frameCommon.Frame {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public onLayout(left: number, top: number, right: number, bottom: number): void {
|
public onLayout(left: number, top: number, right: number, bottom: number): void {
|
||||||
view.View.layoutChild(this, this.currentPage, 0, this.navigationBarHeight, right - left, bottom - top);
|
view.View.layoutChild(this, this.currentPage, 0, 0, right - left, bottom - top);
|
||||||
if (this._navigateToEntry) {
|
if (this._navigateToEntry && this.currentPage) {
|
||||||
view.View.layoutChild(this, this._navigateToEntry.resolvedPage, 0, this.navigationBarHeight, right - left, bottom - top);
|
view.View.layoutChild(this, this._navigateToEntry.resolvedPage, 0, 0, right - left, bottom - top);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected get navigationBarHeight(): number {
|
public get navigationBarHeight(): number {
|
||||||
var navigationBar = this._ios.controller.navigationBar;
|
var navigationBar = this._ios.controller.navigationBar;
|
||||||
return (navigationBar && !this._ios.controller.navigationBarHidden) ? navigationBar.frame.size.height : 0;
|
return (navigationBar && !this._ios.controller.navigationBarHidden) ? navigationBar.frame.size.height : 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
import pageCommon = require("ui/page/page-common");
|
import pageCommon = require("ui/page/page-common");
|
||||||
import definition = require("ui/page");
|
import definition = require("ui/page");
|
||||||
import viewModule = require("ui/core/view");
|
import {View} from "ui/core/view";
|
||||||
import trace = require("trace");
|
import trace = require("trace");
|
||||||
import uiUtils = require("ui/utils");
|
import uiUtils = require("ui/utils");
|
||||||
|
import utils = require("utils/utils");
|
||||||
|
|
||||||
global.moduleMerge(pageCommon, exports);
|
global.moduleMerge(pageCommon, exports);
|
||||||
|
|
||||||
@@ -76,7 +77,7 @@ export class Page extends pageCommon.Page {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public _onContentChanged(oldView: viewModule.View, newView: viewModule.View) {
|
public _onContentChanged(oldView: View, newView: View) {
|
||||||
super._onContentChanged(oldView, newView);
|
super._onContentChanged(oldView, newView);
|
||||||
this._removeNativeView(oldView);
|
this._removeNativeView(oldView);
|
||||||
this._addNativeView(newView);
|
this._addNativeView(newView);
|
||||||
@@ -96,7 +97,7 @@ export class Page extends pageCommon.Page {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _addNativeView(view: viewModule.View) {
|
private _addNativeView(view: View) {
|
||||||
if (view) {
|
if (view) {
|
||||||
trace.write("Native: Adding " + view + " to " + this, trace.categories.ViewHierarchy);
|
trace.write("Native: Adding " + view + " to " + this, trace.categories.ViewHierarchy);
|
||||||
if (view.ios instanceof UIView) {
|
if (view.ios instanceof UIView) {
|
||||||
@@ -108,7 +109,7 @@ export class Page extends pageCommon.Page {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private _removeNativeView(view: viewModule.View) {
|
private _removeNativeView(view: View) {
|
||||||
if (view) {
|
if (view) {
|
||||||
trace.write("Native: Removing " + view + " from " + this, trace.categories.ViewHierarchy);
|
trace.write("Native: Removing " + view + " from " + this, trace.categories.ViewHierarchy);
|
||||||
if (view.ios instanceof UIView) {
|
if (view.ios instanceof UIView) {
|
||||||
@@ -169,16 +170,39 @@ export class Page extends pageCommon.Page {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number) {
|
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number) {
|
||||||
viewModule.View.measureChild(this, this.actionBar, widthMeasureSpec, heightMeasureSpec);
|
|
||||||
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
var width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
|
||||||
|
var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
|
||||||
|
|
||||||
|
let height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
|
||||||
|
let heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
|
||||||
|
|
||||||
|
let navigationBarHeight = this.frame ? this.frame.navigationBarHeight : 0;
|
||||||
|
let heightSpec = utils.layout.makeMeasureSpec(height - navigationBarHeight, heightMode);
|
||||||
|
|
||||||
|
// Measure ActionBar with the full height.
|
||||||
|
let actionBarSize = View.measureChild(this, this.actionBar, widthMeasureSpec, heightMeasureSpec);
|
||||||
|
|
||||||
|
// Measure content with height - navigationBarHeight. Here we could use actionBarSize.measuredHeight probably.
|
||||||
|
let result = View.measureChild(this, this.content, widthMeasureSpec, heightSpec);
|
||||||
|
|
||||||
|
let measureWidth = Math.max(actionBarSize.measuredWidth, result.measuredWidth, this.minWidth);
|
||||||
|
let measureHeight = Math.max(result.measuredHeight + actionBarSize.measuredHeight, this.minHeight);
|
||||||
|
|
||||||
|
let widthAndState = View.resolveSizeAndState(measureWidth, width, widthMode, 0);
|
||||||
|
let heightAndState = View.resolveSizeAndState(measureHeight, height, heightMode, 0);
|
||||||
|
|
||||||
|
this.setMeasuredDimension(widthAndState, heightAndState);
|
||||||
}
|
}
|
||||||
|
|
||||||
public onLayout(left: number, top: number, right: number, bottom: number) {
|
public onLayout(left: number, top: number, right: number, bottom: number) {
|
||||||
viewModule.View.layoutChild(this, this.actionBar, 0, 0, right - left, bottom - top);
|
View.layoutChild(this, this.actionBar, 0, 0, right - left, bottom - top);
|
||||||
super.onLayout(left, top, right, bottom);
|
|
||||||
|
let navigationBarHeight = this.frame ? this.frame.navigationBarHeight : 0;
|
||||||
|
View.layoutChild(this, this.content, 0, navigationBarHeight, right - left, bottom - top);
|
||||||
}
|
}
|
||||||
|
|
||||||
public _addViewToNativeVisualTree(view: viewModule.View): boolean {
|
public _addViewToNativeVisualTree(view: View): boolean {
|
||||||
// ActionBar is added to the native visual tree by default
|
// ActionBar is added to the native visual tree by default
|
||||||
if (view === this.actionBar) {
|
if (view === this.actionBar) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user