当我的布局加载其中的任何视图时,其宽度和高度都为NaN
,它还有getMeasuredHeight()
和getMeasuredWidth()
0
。
在某些时候getMeasuredHeight()
和getMeasuredWidth()
(布局布局后我猜)会收到有用的值。
我如何获得任何尺寸?我该怎么看他们改变? .width
和.height
何时不会NaN
???为什么我不能将视图悬停在整个屏幕上????
到目前为止,我每100毫秒一直投票,我觉得很愚蠢。请帮忙。
答案 0 :(得分:9)
import platform = require("platform")
或者如果您使用typescript angular2-nativescript
import {screen} from "platform"
//or import {screen} from "tns-core-modules/platform/platform"
然后您可以根据您的语言使用它:
screen.mainScreen.heightDIPs //for example : 640
screen.mainScreen.widthDIPs
screen.mainScreen.heightDIPs
screen.mainScreen.heightPixels
mainScreen实现ScreenMetrics界面,允许访问不同的屏幕尺寸。
platform.screen.mainScreen.heightDIPs //for example : 640
platform.screen.mainScreen.widthDIPs
platform.screen.mainScreen.heightDIPs
platform.screen.mainScreen.heightPixels
注意:此属性是移动设备屏幕的尺寸。
答案 1 :(得分:5)
您可以在view.getActualSize().width/height
事件上尝试navigatedTo
。
只有在此活动中,您才能获得height/width
layout/view
您可以参考here
答案 2 :(得分:3)
当NS为视图触发加载事件时,此时尚未呈现它。这就是为什么你里面的所有视图都有0高度和宽度。您可以通过等待某个时间来解决方法,而不是尝试获取视图维度。将此添加到已加载的函数:
var height = 0
function checkIfViewRendered() {
setTimeout(function() {
height = view.getMeasuredHeight()
}, 100)
if (height === 0) checkIfViewRendered()
else console.log('rendered height is', height)
}
checkIfViewRendered()
希望这有帮助。
答案 3 :(得分:2)
我怎样才能看到他们改变?
您也可以在设备旋转时配置一些变量:
Angular2 :中的
import { Component, OnInit, OnDestroy, NgZone } from "@angular/core";
import * as application from "application";
@Component({
...
})
export class MyComponent implements OnInit, OnDestroy {
ngOnInit() {
this.setIsScreenWide();
application.on(application.orientationChangedEvent, this.onOrientationChanged, this);
}
isScreenWide: boolean;
setIsScreenWide() {
let widthDIPs = screen.mainScreen.widthDIPs;
this.isScreenWide = widthDIPs >= 480;
}
onOrientationChanged = (args: application.OrientationChangedEventData) => {
this.zone.run(() => {
setTimeout(() => {
this.setIsScreenWide();
}, 17 /* one frame @ 60 frames/s, no flicker */);
});
};
ngOnDestroy() {
application.off(application.orientationChangedEvent, this.onOrientationChanged, this);
}
...
}
答案 4 :(得分:2)
可以监视order_by
的{{1}}事件。每次完成布局过程都将触发该事件。查看调整大小
games = Game.query.filter(Game.players.contains(p)).order_by(Game.some_field).all()
答案 5 :(得分:1)
您可以订阅页面的navigatedTo
事件,这似乎发生在视图布局之后。 getMeasuredHeight()
和getMeasuredWidth()
方法应该返回一个值。
在xml文件中添加:
<Page xmlns="http://schemas.nativescript.org/tns.xsd" loaded="pageLoaded" navigatedTo="{{ navigated }}">
<DockLayout id="mainLayout">
...
</DockLayout>
在ts文件中添加匹配方法:
public navigated(args:EventData){
alert ("My view height is " + this.myView.getMeasuredHeight());
}
并在pageLoaded事件链接myView
中查看您的视图:
public pageLoaded(args: EventData) {
this.page = <Page>args.object;
this.page.bindingContext = this;
this.myView = <DockLayout>this.page.getViewById("mainLayout");
}
希望这有帮助。
斯特凡诺
答案 6 :(得分:1)
您可以使用layoutChangedEvent
来响应正在调整大小的视图。如果您的视图称为view
,则应采用以下方法:
import { View } from "ui/core/view";
import { EventData } from 'data/observable';
// ...
view.on(View.layoutChangedEvent, (e:EventData) => {
const size = view.getActualSize();
// ... do something with the size
});