Skip to content

Commit c71b606

Browse files
committed
Merge pull request NativeScript#752 from NativeScript/simplify-dependencies
Extracted view-related utility methods from "utils/utils" to "ui/util…
2 parents b84da4d + dd1145c commit c71b606

File tree

8 files changed

+104
-93
lines changed

8 files changed

+104
-93
lines changed

CrossPlatformModules.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,10 @@
816816
</TypeScriptCompile>
817817
<TypeScriptCompile Include="ui\text-view\text-view.d.ts" />
818818
<TypeScriptCompile Include="ui\ui.ts" />
819+
<TypeScriptCompile Include="ui\utils.d.ts" />
820+
<TypeScriptCompile Include="ui\utils.ios.ts">
821+
<DependentUpon>utils.d.ts</DependentUpon>
822+
</TypeScriptCompile>
819823
<TypeScriptCompile Include="utils\module-merge.ts" />
820824
<TypeScriptCompile Include="utils\utils.android.ts">
821825
<DependentUpon>utils.d.ts</DependentUpon>

application/application.ios.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import appModule = require("application/application-common");
22
import frame = require("ui/frame");
3-
import utils = require("utils/utils");
43
import types = require("utils/types");
54
import view = require("ui/core/view");
65
import definition = require("application");
76
import enums = require("ui/enums");
7+
import uiUtils = require("ui/utils");
88

99
global.moduleMerge(appModule, exports);
1010

@@ -32,7 +32,7 @@ class Window extends UIWindow {
3232
}
3333

3434
public layoutSubviews(): void {
35-
utils.ios._layoutRootView(this._content, UIScreen.mainScreen().bounds);
35+
uiUtils.ios._layoutRootView(this._content, UIScreen.mainScreen().bounds);
3636
}
3737
}
3838

ui/page/page.ios.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import definition = require("ui/page");
33
import viewModule = require("ui/core/view");
44
import trace = require("trace");
5-
import utils = require("utils/utils");
5+
import uiUtils = require("ui/utils");
66

77
global.moduleMerge(pageCommon, exports);
88

@@ -23,7 +23,7 @@ class UIViewControllerImpl extends UIViewController {
2323
trace.write(this._owner + " didRotateFromInterfaceOrientation(" + fromInterfaceOrientation + ")", trace.categories.ViewHierarchy);
2424
if (this._owner._isModal) {
2525
var parentBounds = (<any>this._owner)._UIModalPresentationFormSheet ? (<UIView>this._owner._nativeView).superview.bounds : UIScreen.mainScreen().bounds;
26-
utils.ios._layoutRootView(this._owner, parentBounds);
26+
uiUtils.ios._layoutRootView(this._owner, parentBounds);
2727
}
2828
}
2929

@@ -37,7 +37,7 @@ class UIViewControllerImpl extends UIViewController {
3737
trace.write(this._owner + " viewDidLayoutSubviews, isLoaded = " + this._owner.isLoaded, trace.categories.ViewHierarchy);
3838
if (this._owner._isModal) {
3939
var parentBounds = (<any>this._owner)._UIModalPresentationFormSheet ? this._owner._nativeView.superview.bounds : UIScreen.mainScreen().bounds;
40-
utils.ios._layoutRootView(this._owner, parentBounds);
40+
uiUtils.ios._layoutRootView(this._owner, parentBounds);
4141
}
4242
else {
4343
this._owner._updateLayout();
@@ -137,7 +137,7 @@ export class Page extends pageCommon.Page {
137137

138138
if (fullscreen) {
139139
this._ios.modalPresentationStyle = UIModalPresentationStyle.UIModalPresentationFullScreen;
140-
utils.ios._layoutRootView(this, UIScreen.mainScreen().bounds);
140+
uiUtils.ios._layoutRootView(this, UIScreen.mainScreen().bounds);
141141
}
142142
else {
143143
this._ios.modalPresentationStyle = UIModalPresentationStyle.UIModalPresentationFormSheet;
@@ -148,7 +148,7 @@ export class Page extends pageCommon.Page {
148148
parent.ios.presentViewControllerAnimatedCompletion(this._ios, false, function completion() {
149149
if (!fullscreen) {
150150
// We can measure and layout the modal page after we know its parent's dimensions.
151-
utils.ios._layoutRootView(that, that._nativeView.superview.bounds);
151+
uiUtils.ios._layoutRootView(that, that._nativeView.superview.bounds);
152152
}
153153

154154
that._raiseShownModallyEvent(parent, context, closeCallback);

ui/tab-view/tab-view.ios.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
import common = require("ui/tab-view/tab-view-common");
22
import definition = require("ui/tab-view");
33
import dependencyObservable = require("ui/core/dependency-observable");
4-
import utilsModule = require("utils/utils");
54
import trace = require("trace");
65
import utils = require("utils/utils");
6+
import uiUtils = require("ui/utils");
77
import view = require("ui/core/view");
88
import imageSource = require("image-source");
99
import types = require("utils/types");
@@ -244,8 +244,8 @@ export class TabView extends common.TabView {
244244
var height = utils.layout.getMeasureSpecSize(heightMeasureSpec);
245245
var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec);
246246

247-
this._tabBarHeight = utilsModule.ios.getActualHeight(this._ios.tabBar);
248-
this._navBarHeight = utilsModule.ios.getActualHeight(this._ios.moreNavigationController.navigationBar);
247+
this._tabBarHeight = uiUtils.ios.getActualHeight(this._ios.tabBar);
248+
this._navBarHeight = uiUtils.ios.getActualHeight(this._ios.moreNavigationController.navigationBar);
249249

250250
var density = utils.layout.getDisplayDensity();
251251
var measureWidth = 0;

ui/utils.d.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
declare module "ui/utils" {
2+
import view = require("ui/core/view");
3+
module ios {
4+
/**
5+
* Gets actual height of a [UIView](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/) widget.
6+
* @param uiView - An instance of UIView.
7+
*/
8+
export function getActualHeight(uiView: UIView): number;
9+
10+
export function _layoutRootView(rootView: view.View, parentBounds: CGRect): void;
11+
}
12+
}

ui/utils.ios.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
import view = require("ui/core/view");
2+
import utils = require("utils/utils");
3+
4+
export module ios {
5+
export function getActualHeight(uiView: UIView): number {
6+
if (uiView.window && !uiView.hidden) {
7+
return uiView.frame.size.height;
8+
}
9+
10+
return 0;
11+
}
12+
13+
export function _layoutRootView(rootView: view.View, parentBounds: CGRect) {
14+
if (!rootView || !parentBounds) {
15+
return;
16+
}
17+
18+
var landscape = utils.ios.isLandscape();
19+
var iOSMajorVersion = utils.ios.MajorVersion;
20+
var size = parentBounds.size;
21+
var width = size.width;
22+
var height = size.height;
23+
24+
//trace.write("--------------------------------------------", "LayoutRootView.iOS");
25+
//trace.write("| Layout Root View", "LayoutRootView.iOS");
26+
//trace.write("| rootView: " + rootView, "LayoutRootView.iOS");
27+
//trace.write("| parentBounds: " + NSStringFromCGRect(parentBounds), "LayoutRootView.iOS");
28+
//trace.write("| UIScreen.mainScreen().bounds: " + NSStringFromCGRect(UIScreen.mainScreen().bounds), "LayoutRootView.iOS");
29+
//trace.write("| _isModal: " + (<any>rootView)._isModal, "LayoutRootView.iOS");
30+
//trace.write("| _UIModalPresentationFormSheet: " + (<any>rootView)._UIModalPresentationFormSheet, "LayoutRootView.iOS");
31+
//trace.write("| landscape: " + landscape, "LayoutRootView.iOS");
32+
//trace.write("| iOSMajorVersion: " + iOSMajorVersion, "LayoutRootView.iOS");
33+
var superview = (<UIView>rootView._nativeView).superview;
34+
//trace.write("| superview: " + superview, "LayoutRootView.iOS");
35+
var superViewRotationRadians;
36+
if (superview) {
37+
superViewRotationRadians = atan2f(superview.transform.b, superview.transform.a);
38+
//trace.write("| superViewRotationRadians: " + superViewRotationRadians + " rad.", "LayoutRootView.iOS");
39+
//trace.write("| superview.bounds: " + NSStringFromCGRect(superview.bounds), "LayoutRootView.iOS");
40+
}
41+
42+
if (iOSMajorVersion < 8 && landscape && !superViewRotationRadians) {
43+
// in iOS 7 when in landscape we switch width with height because on device they don't change even when rotated.
44+
//trace.write("| >>> Detected iOS 7 device in landscape mode and superview is not rotated. Manually swapping width and height...", "LayoutRootView.iOS");
45+
width = size.height;
46+
height = size.width;
47+
}
48+
49+
var statusBarHeight;
50+
if (UIApplication.sharedApplication().statusBarHidden || ((<any>rootView)._UIModalPresentationFormSheet && !CGSizeEqualToSize(parentBounds.size, UIScreen.mainScreen().bounds.size))) {
51+
statusBarHeight = 0;
52+
}
53+
else {
54+
// Status bar section
55+
var statusFrame = UIApplication.sharedApplication().statusBarFrame;
56+
try {
57+
statusBarHeight = Math.min(statusFrame.size.width, statusFrame.size.height);
58+
} catch (ex) {
59+
console.log("exception: " + ex);
60+
}
61+
}
62+
//trace.write("| UIApplication.sharedApplication().statusBarHidden: " + UIApplication.sharedApplication().statusBarHidden, "LayoutRootView.iOS");
63+
//trace.write("| statusBarHeight: " + statusBarHeight, "LayoutRootView.iOS");
64+
65+
var origin = parentBounds.origin;
66+
var left = origin.x;
67+
var top = origin.y + statusBarHeight;
68+
69+
var widthSpec = utils.layout.makeMeasureSpec(width, utils.layout.EXACTLY);
70+
var heightSpec = utils.layout.makeMeasureSpec(height - statusBarHeight, utils.layout.EXACTLY);
71+
72+
//trace.write("| >>> Will measure and layout with {{" + left + ", " + top + "}{" + width + ", " + height + "}}", "LayoutRootView.iOS");
73+
//trace.write("--------------------------------------------", "LayoutRootView.iOS");
74+
75+
rootView.measure(widthSpec, heightSpec);
76+
rootView.layout(left, top, width, height);
77+
}
78+
}

utils/utils.d.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
declare module "utils/utils" {
22
import colorModule = require("color");
3-
import view = require("ui/core/view");
43

54
export var RESOURCE_PREFIX: string;
65

@@ -129,11 +128,6 @@
129128
* @param uiColor - UIColor instance used to create a NativeScript color.
130129
*/
131130
export function getColor(uiColor: UIColor): colorModule.Color;
132-
/**
133-
* Gets actual height of a [UIView](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIView_Class/) widget.
134-
* @param uiView - An instance of UIView.
135-
*/
136-
export function getActualHeight(uiView: UIView): number;
137131
/**
138132
* Gets an information about if current mode is Landscape.
139133
*/
@@ -142,8 +136,6 @@
142136
* Gets the iOS device major version (for 8.1 will return 8).
143137
*/
144138
export var MajorVersion: number;
145-
146-
export function _layoutRootView(rootView: view.View, parentBounds: CGRect): void;
147139
}
148140
/**
149141
* An utility function that copies properties from source object to target object.

utils/utils.ios.ts

Lines changed: 0 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import common = require("utils/utils-common");
22
import colorModule = require("color");
3-
import view = require("ui/core/view");
43

54
global.moduleMerge(common, exports);
65

@@ -60,14 +59,6 @@ export module ios {
6059
return new colorModule.Color(alpha, red, green, blue);
6160
}
6261

63-
export function getActualHeight(uiView: UIView): number {
64-
if (uiView.window && !uiView.hidden) {
65-
return uiView.frame.size.height;
66-
}
67-
68-
return 0;
69-
}
70-
7162
export function isLandscape(): boolean {
7263
var device = UIDevice.currentDevice();
7364
var statusBarOrientation = UIApplication.sharedApplication().statusBarOrientation;
@@ -76,72 +67,6 @@ export module ios {
7667
}
7768

7869
export var MajorVersion = NSString.stringWithString(UIDevice.currentDevice().systemVersion).intValue;
79-
80-
export function _layoutRootView(rootView: view.View, parentBounds: CGRect) {
81-
if (!rootView || !parentBounds) {
82-
return;
83-
}
84-
85-
var landscape = isLandscape();
86-
var iOSMajorVersion = MajorVersion;
87-
var size = parentBounds.size;
88-
var width = size.width;
89-
var height = size.height;
90-
91-
//trace.write("--------------------------------------------", "LayoutRootView.iOS");
92-
//trace.write("| Layout Root View", "LayoutRootView.iOS");
93-
//trace.write("| rootView: " + rootView, "LayoutRootView.iOS");
94-
//trace.write("| parentBounds: " + NSStringFromCGRect(parentBounds), "LayoutRootView.iOS");
95-
//trace.write("| UIScreen.mainScreen().bounds: " + NSStringFromCGRect(UIScreen.mainScreen().bounds), "LayoutRootView.iOS");
96-
//trace.write("| _isModal: " + (<any>rootView)._isModal, "LayoutRootView.iOS");
97-
//trace.write("| _UIModalPresentationFormSheet: " + (<any>rootView)._UIModalPresentationFormSheet, "LayoutRootView.iOS");
98-
//trace.write("| landscape: " + landscape, "LayoutRootView.iOS");
99-
//trace.write("| iOSMajorVersion: " + iOSMajorVersion, "LayoutRootView.iOS");
100-
var superview = (<UIView>rootView._nativeView).superview;
101-
//trace.write("| superview: " + superview, "LayoutRootView.iOS");
102-
var superViewRotationRadians;
103-
if (superview) {
104-
superViewRotationRadians = atan2f(superview.transform.b, superview.transform.a);
105-
//trace.write("| superViewRotationRadians: " + superViewRotationRadians + " rad.", "LayoutRootView.iOS");
106-
//trace.write("| superview.bounds: " + NSStringFromCGRect(superview.bounds), "LayoutRootView.iOS");
107-
}
108-
109-
if (iOSMajorVersion < 8 && landscape && !superViewRotationRadians) {
110-
// in iOS 7 when in landscape we switch width with height because on device they don't change even when rotated.
111-
//trace.write("| >>> Detected iOS 7 device in landscape mode and superview is not rotated. Manually swapping width and height...", "LayoutRootView.iOS");
112-
width = size.height;
113-
height = size.width;
114-
}
115-
116-
var statusBarHeight;
117-
if (UIApplication.sharedApplication().statusBarHidden || ((<any>rootView)._UIModalPresentationFormSheet && !CGSizeEqualToSize(parentBounds.size, UIScreen.mainScreen().bounds.size))) {
118-
statusBarHeight = 0;
119-
}
120-
else {
121-
// Status bar section
122-
var statusFrame = UIApplication.sharedApplication().statusBarFrame;
123-
try {
124-
statusBarHeight = Math.min(statusFrame.size.width, statusFrame.size.height);
125-
} catch (ex) {
126-
console.log("exception: " + ex);
127-
}
128-
}
129-
//trace.write("| UIApplication.sharedApplication().statusBarHidden: " + UIApplication.sharedApplication().statusBarHidden, "LayoutRootView.iOS");
130-
//trace.write("| statusBarHeight: " + statusBarHeight, "LayoutRootView.iOS");
131-
132-
var origin = parentBounds.origin;
133-
var left = origin.x;
134-
var top = origin.y + statusBarHeight;
135-
136-
var widthSpec = layout.makeMeasureSpec(width, common.layout.EXACTLY);
137-
var heightSpec = layout.makeMeasureSpec(height - statusBarHeight, common.layout.EXACTLY);
138-
139-
//trace.write("| >>> Will measure and layout with {{" + left + ", " + top + "}{" + width + ", " + height + "}}", "LayoutRootView.iOS");
140-
//trace.write("--------------------------------------------", "LayoutRootView.iOS");
141-
142-
rootView.measure(widthSpec, heightSpec);
143-
rootView.layout(left, top, width, height);
144-
}
14570
}
14671

14772
export function GC() {

0 commit comments

Comments
 (0)