【问题标题】:Get the height of a generated view获取生成视图的高度
【发布时间】:2018-10-11 19:58:33
【问题描述】:

我正在尝试获取StackLayout 的高度。这个布局充满了来自我后端的数据,所以它并不总是相同的高度。我试过view.getViewById(parent, selector).effectiveHeight,但它一直在输出0

我的 XML 文件看起来有点像这样:

<Page>
    <ActionBar title="..."></ActionBar>
    <GridLayout rows="*, auto" columns="*">
        <ScrollView row="0" col="0">
            <GridLayout rows="*" columns="*">
                <StackLayout id="TARGET" row="0" col="1">
                    <StackLayout *ngFor="let x of y">
                        <FlexboxLayout justifyContent="space-between">
                            <FlexboxLayout>
                                <StackLayout>
                                    ...
                                </StackLayout>
                            </FlexboxLayout>

                            <FlexboxLayout justifyContent="space-between">
                                ...
                            </FlexboxLayout>

                        </FlexboxLayout>
                    </StackLayout>   
                </StackLayout>
                <StackLayout col="0" row="0">
                    ...
                </StackLayout>
            </GridLayout>
        </ScrollView>

        <StackLayout row="1" col="0">
            ...
        </StackLayout>
    </GridLayout>
</Page>

提前谢谢你!

【问题讨论】:

    标签: nativescript angular2-nativescript nativescript-telerik-ui nativescript-angular nativescript-cli


    【解决方案1】:

    如果你使用view.getViewById(parent, selector).effectiveHeight,它只有在视图被渲染和加载时才有效。即使您尝试获取 loaded() 事件的值,由于 nativescript 错误,它也会为 0。 要解决这种情况,我建议将超时设置为 200 毫秒。 例如

    home.component.html

    <ListView [items]="a"  class="list-group">
        <ng-template let-country="item" let-i="index" let-odd="odd" let-even="even">
            <WrapLayout  width="100%"  orientation="horizontal" backgroundColor="palegreen">
                <StackLayout  #abc  (loaded)="getSize($event)" width="20%" [height]="testWidth" backgroundColor="lightgray">
                    <Label [text]="'W'+testWidth" backgroundColor="red"></Label>
                    <Label text="LA" backgroundColor="green"></Label>
                </StackLayout>
            </WrapLayout>
        </ng-template>
    </ListView>
    

    home.component.ts

    import { Component, OnInit, ViewChild } from "@angular/core";
    import { PercentLength } from "tns-core-modules/ui/styling/style-properties"
    import { StackLayout } from "ui/layouts/stack-layout"
    @Component({
        selector: "Home",
        moduleId: module.id,
        templateUrl: "./home.component.html",
        styleUrls: ['./home.component.css']
    })
    export class HomeComponent implements OnInit {
        a = ['1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2', '1', '2',]
        @ViewChild('abc') abc;
        testWidth = 0;
        constructor() {
    
        }
        getSize(args) {
            setTimeout(() => {
                let stack= <StackLayout>args.object;
                var stackSize = args.object.getActualSize();
                var stackWidth = stackSize.width;
                var stackHeight = stackSize.height;
                console.log("stackWidth: " + stackWidth);
                console.log("stackHeight: " + stackHeight);
                this.testWidth = stackWidth;
            }, 200);
        }
        ngOnInit(): void {
        }
        toDevicePixels(percentage: PercentLength) {
            console.dir(PercentLength.convertToString(percentage))
            return PercentLength.toDevicePixels(percentage,0,0);
        }
    }
    

    代码示例还展示了如何动态获取 StackLayout 的高度和宽度并将它们绑定到视图。

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 在通过 id 选择的视图上尝试给我这个错误:[ts] Property 'getMeasuredHeight' does not exist on type 'ViewBase'.
      • 如果您可以创建一个游乐场示例来演示您的问题,也许我可以解决这个问题。
      猜你喜欢
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      相关资源
      最近更新 更多