Label zero height issue fixed.

This commit is contained in:
Nedyalko Nikolov
2016-08-16 16:33:56 +03:00
parent 3968d6fb82
commit 97a1ad6a7a
2 changed files with 64 additions and 12 deletions

View File

@ -524,12 +524,13 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
TKUnit.assertNotEqual(this.errorMessage, undefined); TKUnit.assertNotEqual(this.errorMessage, undefined);
} }
private requestLayoutFixture(expectRequestLayout: boolean, setup: (label: Label) => LayoutBase): void { private requestLayoutFixture(expectRequestLayout: boolean, initialValue: string, setup: (label: Label) => LayoutBase): void {
if (!isIOS) { if (!isIOS) {
return; return;
} }
let label = new Label(); let label = new Label();
label.text = initialValue;
let host = setup(label); let host = setup(label);
host.addChild(label); host.addChild(label);
@ -540,7 +541,8 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
let called = false; let called = false;
label.requestLayout = () => called = true; label.requestLayout = () => called = true;
label.text = "Hello World"; // changing text actually could request layout
label.text = initialValue + " Again";
if (expectRequestLayout) { if (expectRequestLayout) {
TKUnit.assertTrue(called, "label.requestLayout should be called."); TKUnit.assertTrue(called, "label.requestLayout should be called.");
@ -549,8 +551,8 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
} }
} }
public test_SettingTextWhenInFixedSizeGridShouldNotRequestLayout() { public test_SettingTextWhenInFixedSizeGridShouldRequestLayout() {
this.requestLayoutFixture(false, () => { this.requestLayoutFixture(true, "", () => {
let host = new GridLayout(); let host = new GridLayout();
host.width = 100; host.width = 100;
host.height = 100; host.height = 100;
@ -558,8 +560,26 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
}); });
} }
public test_SettingTextWhenFixedWidthAndHeightDoesNotRequestLayout() { public test_ChangingTextWhenInFixedSizeGridShouldNotRequestLayout() {
this.requestLayoutFixture(false, label => { this.requestLayoutFixture(false, "Hello World", () => {
let host = new GridLayout();
host.width = 100;
host.height = 100;
return host;
});
}
public test_SettingTextWhenFixedWidthAndHeightDoesRequestLayout() {
this.requestLayoutFixture(true, "", label => {
let host = new StackLayout();
label.width = 100;
label.height = 100;
return host;
});
};
public test_ChangingTextWhenFixedWidthAndHeightDoesNotRequestLayout() {
this.requestLayoutFixture(false, "Hello World", label => {
let host = new StackLayout(); let host = new StackLayout();
label.width = 100; label.width = 100;
label.height = 100; label.height = 100;
@ -568,15 +588,31 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
}; };
public test_SettingTextWhenSizedToContentShouldInvalidate() { public test_SettingTextWhenSizedToContentShouldInvalidate() {
this.requestLayoutFixture(true, () => { this.requestLayoutFixture(true, "", () => {
let host = new StackLayout(); let host = new StackLayout();
host.orientation = "horizontal"; host.orientation = "horizontal";
return host; return host;
}); });
}; };
public test_SettingTextOnSingleLineTextWhenWidthIsSizedToParentAndHeightIsSizedToContentShouldNotRequestLayout() { public test_ChangingTextWhenSizedToContentShouldInvalidate() {
this.requestLayoutFixture(false, () => { this.requestLayoutFixture(true, "Hello World", () => {
let host = new StackLayout();
host.orientation = "horizontal";
return host;
});
};
public test_SettingTextOnSingleLineTextWhenWidthIsSizedToParentAndHeightIsSizedToContentShouldRequestLayout() {
this.requestLayoutFixture(true, "", () => {
let host = new StackLayout();
host.width = 100;
return host;
});
}
public test_ChangingTextOnSingleLineTextWhenWidthIsSizedToParentAndHeightIsSizedToContentShouldNotRequestLayout() {
this.requestLayoutFixture(false, "Hello World", () => {
let host = new StackLayout(); let host = new StackLayout();
host.width = 100; host.width = 100;
return host; return host;
@ -584,7 +620,16 @@ export class LabelTest extends testModule.UITest<LabelModule.Label> {
} }
public test_SettingTextOnMultilineLineTextWhenWidthIsSizedToParentAndHeightIsSizedToContentShouldRequestLayout() { public test_SettingTextOnMultilineLineTextWhenWidthIsSizedToParentAndHeightIsSizedToContentShouldRequestLayout() {
this.requestLayoutFixture(true, label => { this.requestLayoutFixture(true, "", label => {
label.textWrap = true;
let host = new StackLayout();
host.width = 100;
return host;
});
}
public test_ChangingTextOnMultilineLineTextWhenWidthIsSizedToParentAndHeightIsSizedToContentShouldRequestLayout() {
this.requestLayoutFixture(true, "Hello World", label => {
label.textWrap = true; label.textWrap = true;
let host = new StackLayout(); let host = new StackLayout();
host.width = 100; host.width = 100;

View File

@ -45,6 +45,7 @@ export class Label extends common.Label {
} }
_requestLayoutOnTextChanged(): void { _requestLayoutOnTextChanged(): void {
console.log("requestLayout called --------------------------------------->");
if (this._fixedSize === FixedSize.BOTH) { if (this._fixedSize === FixedSize.BOTH) {
return; return;
} }
@ -52,6 +53,7 @@ export class Label extends common.Label {
// Single line label with fixed width will skip request layout on text change. // Single line label with fixed width will skip request layout on text change.
return; return;
} }
console.log("actual requestLayout called --------------------------------------->");
super._requestLayoutOnTextChanged(); super._requestLayoutOnTextChanged();
} }
@ -72,8 +74,13 @@ export class Label extends common.Label {
height = Number.POSITIVE_INFINITY; height = Number.POSITIVE_INFINITY;
} }
this._fixedSize = (widthMode === utils.layout.EXACTLY ? FixedSize.WIDTH : FixedSize.NONE) if (this.text !== "") {
| (heightMode === utils.layout.EXACTLY ? FixedSize.HEIGHT : FixedSize.NONE); this._fixedSize = (widthMode === utils.layout.EXACTLY ? FixedSize.WIDTH : FixedSize.NONE)
| (heightMode === utils.layout.EXACTLY ? FixedSize.HEIGHT : FixedSize.NONE);
}
else {
this._fixedSize = FixedSize.NONE;
}
var nativeSize = nativeView.sizeThatFits(CGSizeMake(width, height)); var nativeSize = nativeView.sizeThatFits(CGSizeMake(width, height));
var labelWidth = nativeSize.width; var labelWidth = nativeSize.width;