mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-15 19:26:42 +08:00
feat(ios-list-view): introduce iosEstimatedRowHeight property. (#5568)
* feat(ios-list-view): introduce iosEstimatedRowHeight property. * chore(ui-tests-app): add test for auto measured ListView.
This commit is contained in:

committed by
GitHub

parent
0012bfd4d8
commit
52c044891e
@ -51,5 +51,15 @@
|
|||||||
</ListView>
|
</ListView>
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
|
|
||||||
|
<StackLayout class="p-10" row="3">
|
||||||
|
<Label text="ios-estimated-row-height" class="body m-b-10" />
|
||||||
|
<ListView items="{{ $value }}" iosEstimatedRowHeight="0">
|
||||||
|
<ListView.itemTemplate>
|
||||||
|
<Label text="{{ $value }}" />
|
||||||
|
</ListView.itemTemplate>
|
||||||
|
</ListView>
|
||||||
|
<Label text="after-auto-estimated-height" class="body m-b-10" />
|
||||||
|
</StackLayout>
|
||||||
|
|
||||||
</StackLayout>
|
</StackLayout>
|
||||||
</Page>
|
</Page>
|
@ -42,6 +42,7 @@ export abstract class ListViewBase extends View implements ListViewDefinition, T
|
|||||||
public _itemTemplatesInternal = new Array<KeyedTemplate>(this._defaultTemplate);
|
public _itemTemplatesInternal = new Array<KeyedTemplate>(this._defaultTemplate);
|
||||||
public _effectiveRowHeight: number = autoEffectiveRowHeight;
|
public _effectiveRowHeight: number = autoEffectiveRowHeight;
|
||||||
public rowHeight: Length;
|
public rowHeight: Length;
|
||||||
|
public iosEstimatedRowHeight: Length;
|
||||||
public items: any[] | ItemsSource;
|
public items: any[] | ItemsSource;
|
||||||
public itemTemplate: string | Template;
|
public itemTemplate: string | Template;
|
||||||
public itemTemplates: string | Array<KeyedTemplate>;
|
public itemTemplates: string | Array<KeyedTemplate>;
|
||||||
@ -210,5 +211,10 @@ export const rowHeightProperty = new CoercibleProperty<ListViewBase, Length>({
|
|||||||
});
|
});
|
||||||
rowHeightProperty.register(ListViewBase);
|
rowHeightProperty.register(ListViewBase);
|
||||||
|
|
||||||
|
export const iosEstimatedRowHeightProperty = new Property<ListViewBase, Length>({
|
||||||
|
name: "iosEstimatedRowHeight", valueConverter: (v) => Length.parse(v)
|
||||||
|
});
|
||||||
|
iosEstimatedRowHeightProperty.register(ListViewBase);
|
||||||
|
|
||||||
export const separatorColorProperty = new CssProperty<Style, Color>({ name: "separatorColor", cssName: "separator-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) });
|
export const separatorColorProperty = new CssProperty<Style, Color>({ name: "separatorColor", cssName: "separator-color", equalityComparer: Color.equals, valueConverter: (v) => new Color(v) });
|
||||||
separatorColorProperty.register(Style);
|
separatorColorProperty.register(Style);
|
||||||
|
11
tns-core-modules/ui/list-view/list-view.d.ts
vendored
11
tns-core-modules/ui/list-view/list-view.d.ts
vendored
@ -78,6 +78,12 @@ export class ListView extends View {
|
|||||||
*/
|
*/
|
||||||
rowHeight: Length;
|
rowHeight: Length;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets or set the estimated height of rows in the ListView.
|
||||||
|
* The default value is 44px.
|
||||||
|
*/
|
||||||
|
iosEstimatedRowHeight: Length;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Forces the ListView to reload all its items.
|
* Forces the ListView to reload all its items.
|
||||||
*/
|
*/
|
||||||
@ -188,6 +194,11 @@ export const separatorColor: Property<ListView, Color>;
|
|||||||
*/
|
*/
|
||||||
export const rowHeightProperty: Property<ListView, Length>;
|
export const rowHeightProperty: Property<ListView, Length>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the observable property backing the iosEstimatedRowHeight property of each ListView instance.
|
||||||
|
*/
|
||||||
|
export const iosEstimatedRowHeightProperty: Property<ListView, Length>;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Backing property for separator color property.
|
* Backing property for separator color property.
|
||||||
*/
|
*/
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
import { ItemEventData } from ".";
|
import { ItemEventData } from ".";
|
||||||
import {
|
import {
|
||||||
ListViewBase, View, KeyedTemplate, Length, Observable, Color,
|
ListViewBase, View, KeyedTemplate, Length, Observable, Color,
|
||||||
separatorColorProperty, itemTemplatesProperty, layout, EventData
|
separatorColorProperty, itemTemplatesProperty, iosEstimatedRowHeightProperty, layout, EventData
|
||||||
} from "./list-view-common";
|
} from "./list-view-common";
|
||||||
import { StackLayout } from "../layouts/stack-layout";
|
import { StackLayout } from "../layouts/stack-layout";
|
||||||
import { ProxyViewContainer } from "../proxy-view-container";
|
import { ProxyViewContainer } from "../proxy-view-container";
|
||||||
@ -138,7 +138,7 @@ class UITableViewDelegateImpl extends NSObject implements UITableViewDelegate {
|
|||||||
public tableViewHeightForRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath): number {
|
public tableViewHeightForRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath): number {
|
||||||
const owner = this._owner.get();
|
const owner = this._owner.get();
|
||||||
if (!owner) {
|
if (!owner) {
|
||||||
return DEFAULT_HEIGHT;
|
return tableView.estimatedRowHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
let height: number;
|
let height: number;
|
||||||
@ -198,7 +198,7 @@ class UITableViewRowHeightDelegateImpl extends NSObject implements UITableViewDe
|
|||||||
public tableViewHeightForRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath): number {
|
public tableViewHeightForRowAtIndexPath(tableView: UITableView, indexPath: NSIndexPath): number {
|
||||||
let owner = this._owner.get();
|
let owner = this._owner.get();
|
||||||
if (!owner) {
|
if (!owner) {
|
||||||
return DEFAULT_HEIGHT;
|
return tableView.estimatedRowHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
return owner._effectiveRowHeight;
|
return owner._effectiveRowHeight;
|
||||||
@ -345,7 +345,7 @@ export class ListView extends ListViewBase {
|
|||||||
return height;
|
return height;
|
||||||
}
|
}
|
||||||
|
|
||||||
return DEFAULT_HEIGHT;
|
return this._ios.estimatedRowHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
public _prepareCell(cell: ListViewCell, indexPath: NSIndexPath): number {
|
public _prepareCell(cell: ListViewCell, indexPath: NSIndexPath): number {
|
||||||
@ -428,4 +428,13 @@ export class ListView extends ListViewBase {
|
|||||||
|
|
||||||
this.refresh();
|
this.refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[iosEstimatedRowHeightProperty.getDefault](): Length {
|
||||||
|
return DEFAULT_HEIGHT;
|
||||||
|
}
|
||||||
|
[iosEstimatedRowHeightProperty.setNative](value: Length) {
|
||||||
|
const nativeView = this._ios;
|
||||||
|
const estimatedHeight = Length.toDevicePixels(value, 0);
|
||||||
|
nativeView.estimatedRowHeight = estimatedHeight < 0 ? DEFAULT_HEIGHT : estimatedHeight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user