diff --git a/CrossPlatformModules.csproj b/CrossPlatformModules.csproj
index 786adf343..8dcc19ea0 100644
--- a/CrossPlatformModules.csproj
+++ b/CrossPlatformModules.csproj
@@ -80,6 +80,7 @@
data-binding.xml
+
@@ -183,8 +184,8 @@
- nordic.xml
-
+ nordic.xml
+
@@ -1984,7 +1985,7 @@
False
-
+
\ No newline at end of file
diff --git a/apps/tests/testRunner.ts b/apps/tests/testRunner.ts
index 83cb56918..bb02546d6 100644
--- a/apps/tests/testRunner.ts
+++ b/apps/tests/testRunner.ts
@@ -61,6 +61,7 @@ allTests["IMAGE"] = require("./ui/image/image-tests");
allTests["SLIDER"] = require("./ui/slider/slider-tests");
allTests["SWITCH"] = require("./ui/switch/switch-tests");
allTests["PROGRESS"] = require("./ui/progress/progress-tests");
+allTests["PLACEHOLDER"] = require("./ui/placeholder/placeholder-tests");
allTests["PAGE"] = require("./ui/page/page-tests");
allTests["LISTVIEW"] = require("./ui/list-view/list-view-tests");
allTests["ACTIVITY-INDICATOR"] = require("./ui/activity-indicator/activity-indicator-tests");
diff --git a/apps/tests/ui/placeholder/placeholder-tests.ts b/apps/tests/ui/placeholder/placeholder-tests.ts
new file mode 100644
index 000000000..97395cf15
--- /dev/null
+++ b/apps/tests/ui/placeholder/placeholder-tests.ts
@@ -0,0 +1,78 @@
+import TKUnit = require("../../TKUnit");
+import platform = require("platform");
+import utils = require("utils/utils");
+import helper = require("../helper");
+import viewModule = require("ui/core/view");
+
+//
+// # Placeholder
+// Using the placeholder requires the Placeholder module.
+// ``` JavaScript
+import placeholderModule = require("ui/placeholder");
+// ```
+
+// Creating native view for the Placeholder using creatingView event.
+//```XML
+//
+// {%raw%}{%endraw%}
+//
+//```
+//```JS
+//var platform = require("platform");
+//var utils = require("utils/utils");
+//
+//function creatingView(args) {
+// var nativeView;
+// if (platform.device.os === platform.platformNames.ios) {
+// nativeView = new UITextView();
+// nativeView.text = "Native";
+// } else if (platform.device.os === platform.platformNames.android) {
+// nativeView = new android.widget.TextView(utils.ad.getApplicationContext());
+// nativeView.setText("Native");
+// }
+//
+// args.view = nativeView;
+//}
+//
+//exports.creatingView = creatingView;
+//```
+//
+
+export function test_placeholder_creatingView() {
+ var nativeView;
+
+ var p = new placeholderModule.Placeholder();
+ p.id = "test";
+ p.on(placeholderModule.Placeholder.creatingViewEvent, (args: placeholderModule.CreateViewEventData) => {
+ if (platform.device.os === platform.platformNames.ios) {
+ nativeView = new UITextView();
+ nativeView.text = "Native";
+ } else if (platform.device.os === platform.platformNames.android) {
+ nativeView = new android.widget.TextView(utils.ad.getApplicationContext());
+ nativeView.setText("Native");
+ }
+
+ args.view = nativeView;
+ });
+
+ if (platform.device.os === platform.platformNames.ios) {
+ TKUnit.assert(p.ios instanceof UITextView, "ios property should be UITextView. Current value: " + p.ios);
+ } else if (platform.device.os === platform.platformNames.android) {
+ p._emit("creatingView");
+ TKUnit.assert(nativeView instanceof android.widget.TextView, "Native view should be android.widget.TextView. Current value: " + nativeView);
+ }
+}
+
+export function test_placeholder_will_not_crash_wihout_creatingView() {
+ var p = new placeholderModule.Placeholder();
+
+ function testAction(views: Array) {
+ if (platform.device.os === platform.platformNames.ios) {
+ TKUnit.assert(p.ios === undefined, "ios property should be undefined. Current value: " + p.ios);
+ } else if (platform.device.os === platform.platformNames.android) {
+ TKUnit.assert(p.android === undefined, "android view should be undefined. Current value: " + p.android);
+ }
+ };
+
+ helper.buildUIAndRunTest(p, testAction);
+}
\ No newline at end of file
diff --git a/ui/core/view.ios.ts b/ui/core/view.ios.ts
index 922b9de36..02cc7751d 100644
--- a/ui/core/view.ios.ts
+++ b/ui/core/view.ios.ts
@@ -196,8 +196,10 @@ export class View extends viewCommon.View {
public onMeasure(widthMeasureSpec: number, heightMeasureSpec: number): void {
var view = this._nativeView;
- if (view) {
+ let nativeWidth = 0;
+ let nativeHeight = 0;
+ if (view) {
var width = utils.layout.getMeasureSpecSize(widthMeasureSpec);
var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec);
@@ -213,15 +215,17 @@ export class View extends viewCommon.View {
}
var nativeSize = view.sizeThatFits(CGSizeMake(width, height));
-
- var measureWidth = Math.max(nativeSize.width, this.minWidth);
- var measureHeight = Math.max(nativeSize.height, this.minHeight);
-
- var widthAndState = View.resolveSizeAndState(measureWidth, width, widthMode, 0);
- var heightAndState = View.resolveSizeAndState(measureHeight, height, heightMode, 0);
-
- this.setMeasuredDimension(widthAndState, heightAndState);
+ nativeWidth = nativeSize.width;
+ nativeHeight = nativeSize.height;
}
+
+ var measureWidth = Math.max(nativeWidth, this.minWidth);
+ var measureHeight = Math.max(nativeHeight, this.minHeight);
+
+ var widthAndState = View.resolveSizeAndState(measureWidth, width, widthMode, 0);
+ var heightAndState = View.resolveSizeAndState(measureHeight, height, heightMode, 0);
+
+ this.setMeasuredDimension(widthAndState, heightAndState);
}
public onLayout(left: number, top: number, right: number, bottom: number): void {
@@ -305,12 +309,12 @@ export class CustomLayoutView extends View {
if (this._nativeView && child._nativeView) {
if (types.isNullOrUndefined(atIndex) || atIndex >= this._nativeView.subviews.count) {
- this._nativeView.addSubview(child._nativeView);
+ this._nativeView.addSubview(child._nativeView);
}
else {
this._nativeView.insertSubviewAtIndex(child._nativeView, atIndex);
}
-
+
return true;
}
diff --git a/ui/placeholder/placeholder.android.ts b/ui/placeholder/placeholder.android.ts
index d3de56051..ebae384f5 100644
--- a/ui/placeholder/placeholder.android.ts
+++ b/ui/placeholder/placeholder.android.ts
@@ -9,7 +9,7 @@ export class Placeholder extends common.Placeholder {
public _createUI() {
var args = { eventName: common.Placeholder.creatingViewEvent, object: this, view: undefined, context: this._context };
this.notify(args);
- this._android = args.view || new android.view.View(this._context);
+ this._android = args.view;
}
get android(): android.view.View {
diff --git a/ui/placeholder/placeholder.ios.ts b/ui/placeholder/placeholder.ios.ts
index b4ca8eb2a..c05f20456 100644
--- a/ui/placeholder/placeholder.ios.ts
+++ b/ui/placeholder/placeholder.ios.ts
@@ -10,7 +10,7 @@ export class Placeholder extends common.Placeholder {
if (!this._ios) {
var args = { eventName: common.Placeholder.creatingViewEvent, object: this, view: undefined, context: undefined };
super.notify(args);
- this._ios = args.view || new UIView();
+ this._ios = args.view;
}
return this._ios;
}