我正在使用PhoneGap / Cordova开发一个Windows Phone应用程序(不过,我相信我遇到的问题是因为它与PhoneGap无关)。 无论我做什么,我的html页面的标签都不会垂直填满屏幕。 在Chrome或IE中运行页面时看起来很好 这是仿真器上的样子,我在.css中为标签添加了一个蓝色边框,以强调正在发生的事情:
这是身体的css:
body{
border: 1px blue solid;
}
html, body{
height:100%;
min-height:100%
}
这是页脚css:
div.navbar_table_container {
width: 100%;
height: auto;
position: absolute;
bottom: 0;
background-image:url(images/bottom-nav.png);
background-size:100% 100%;
background-repeat:no-repeat;
text-align: center;
}
并且,因为它可能很重要,这是xaml文件:
<phone:PhoneApplicationPage
x:Class="CordovaWP8_2_7_01.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
Background="White"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True" d:DesignHeight="820" d:DesignWidth="480"
xmlns:my="clr-namespace:WPCordovaClassLib">
<Grid x:Name="LayoutRoot" Background="Transparent" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<my:CordovaView HorizontalAlignment="Stretch"
Margin="0,0,0,0"
x:Name="CordovaView"
VerticalAlignment="Stretch" />
<Image Source="SplashScreenImage.jpg"
x:Name="SplashImage"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch">
<Image.Projection>
<PlaneProjection x:Name="SplashProjector" CenterOfRotationX="0"/>
</Image.Projection>
</Image>
</Grid>
</phone:PhoneApplicationPage>
一个重要的注意事项是,它在Chrome,IE以及我作为Android应用程序运行时的工作方式。
我能找到的最接近我的问题是 Phonegap Windows Phone gap space bottom 但那里的答案对我没有帮助。
我最近注意到,当我从网络服务器运行相同的代码并使用Windows手机上的IE访问它时,它看起来很好。但是,我确实注意到,每当手机上显示警报时,IE的地址栏就会消失,并留下从网络内容底部到手机底部的完全相同的差距,因为本机应用程序始终显示。
所以,这让我相信,即使它是一个“应用程序”,如果它运行html和javascript,手机会留出空间用于地址栏,即使它从未使用过。
非常感谢任何帮助或见解。
答案 0 :(得分:12)
我尝试在viewport元标记中使用device-height,但是我了解到IE不支持该标记。在我的100,000次Google搜索之后,我找到了this page。
将此添加到我的CSS后:
@viewport{height:device-height}
@viewport{width:device-width}
@-ms-viewport{height:device-height}
@-ms-viewport{width:device-width}
并将其添加到访问我所有网页的JavaScript文件中:
if (navigator.userAgent.match(/IEMobile\/10\.0/)) {
var msViewportStyle = document.createElement("style");
msViewportStyle.appendChild(
document.createTextNode(
"@-ms-viewport{width:auto!important}"
)
);
msViewportStyle.appendChild(
document.createTextNode(
"@-ms-viewport{height:device-height!important}"
)
);
document.getElementsByTagName("head")[0].appendChild(msViewportStyle);
}
然后我100%的身高开始按照我期望的方式行事。
答案 1 :(得分:3)
在MainPage.xaml
文件中,更改
shell:SystemTray.IsVisible="True"
到
shell:SystemTray.IsVisible="False"
答案 2 :(得分:1)
似乎关键是-ms-viewport中的width属性,因此更简单的解决方案是:
// put this in body or after body as it uses document.body.offsetWidth.
if (/IEMobile\/10\.0/.test(navigator.userAgent)) {
document.write('<style>@-ms-viewport { width: ' + document.body.offsetWidth + 'px; }</style>');
}
答案 3 :(得分:0)
溢出是一个奇怪的IE10 WebBrowser控件。如果更改正文的背景颜色,您将看到div的上方和下方都是背景颜色。
这是一个简单的解决方法:
document.addEventListener("DOMContentLoaded", function () {
var div = document.querySelector(".navbar_table_container");
div.style.top = (div.offsetTop + div.offsetHeight + 4) + "px";
});