【问题标题】:Fixed position footer scrolls in iPhone XiPhone X 中的固定位置页脚滚动
【发布时间】:2018-10-16 15:52:35
【问题描述】:

我有一个使用 Trigger.io 框架创建的混合 HTML5 应用程序。

该应用程序包含一个固定的页脚和一个滚动的内容区域。该应用程序在除 iPhone X 之外的所有设备上都能正常运行。在 iPhone X 上,当我滚动内容区域时,页脚实际上会滚动出一点。

这是当页脚在视图中时应用程序的外观

但是一旦我向下滚动,页脚就会隐藏,只有在我再次向上滚动时才会显示。

我已经针对刘海应用了 iPhone X 优化,并且在设计中效果很好。唯一剩下的问题是滚动问题。

由于我使用的是混合框架,因此视图是用 HTML + CSS 构建的,而不是原生 UI 组件。

对于为什么 iPhone X 上的页脚可能会向下滚动有什么想法吗?

【问题讨论】:

  • 过去我在 iPhone SE 上的固定标题也是如此。他们只会在页面的前半部分保持固定。你是如何修复 CSS 中的页脚的?可以分享一下代码吗?
  • 您能提供您的代码以便我们尝试解决吗?
  • 你能从UIWebView切换到WKWebView吗?
  • @ManuelOtto 是的,我尝试切换到 WKWebView 但问题仍然存在
  • @MarioE 抱歉,我实际上无法提供任何实际代码。我使用 bootstrap 3 作为核心 CSS,修改了固定的页眉/页脚样式。

标签: html ios css iphone trigger.io


【解决方案1】:

提出一个用 JQuery 修复它的想法

CSS

body
  margin: 0

#WhatEverClassOrIdYouGaveIt
  height: 10em // or whatever size u want
  width: 100%
  //background-color: red
  position: absolute // or fixed

jQuery

resize = () => {
  var o = $(document)
  dW = o.width() //Not needed
  dH = o.height()
  $("#WhatEverClassOrIdYouGaveIt").css({
    top: dH - $("#WhatEverClassOrIdYouGaveIt").height()
  })
}

$(window).resize(() => {
  resize()
})

resize()

【讨论】:

  • 对不起,我试过了,但没有成功。这种方式相当于使用 CSS 设置值,dH - elem.height() 只需要计算一次
【解决方案2】:

不要在 CSS 中使用fixed 位置。试试translateZ() CSS 函数,它可以在 3D 空间中沿 z 轴重新定位元素,即靠近或远离观察者。其结果是 <transform-function> 数据类型。

这是一个 HTML 代码:

<div>Static</div>
<div class="moved">Moved</div>

这是一个 CSS 代码:

div {
  position: relative;
  width: 100px;
  height: 1000px;
  left: 200px;
  background-color: black;
}
.moved {
  transform: perspective(400px) translateZ(180px);
  background-color: red;
}

【讨论】:

    【解决方案3】:

    您可以尝试将 div 放在可滚动部分之外,并固定位置。所以如果你有一个滚动的代码,

    <div id="scroll-container">
      <div id="scrollable">
      </div>
    <div>
    

    这样div滚动容器中的任何元素,它都会滚动。

    如果你把它放在可滚动部分之外,

    <div id="scroll-container">
    <div>
    <div id="not-scrollable">
    </div>
    

    并将position:fixed;position:absolute;position: sticky;(Brainfeeder)(我还没有尝试过)或device-fixed;(web-stars)(也没有尝试过)放在css 中#not-scrollable,它不应该滚动。试试看。

    当然,这不会使其相对于滚动容器,它会使其相对于它所在的任何容器,在这种情况下,它是 body 标签。

    注意:我只是以 div 为例。你可以随心所欲地使用它

    新:如果 body 是您的滚动条,请在 body 标记内添加一个 div,但在您声明 body 标记之后,以便滚动条是 div。

    有很多网站向您展示如何将网页应用到 iPhone X。Here's 其中之一。

    【讨论】:

    • 分解和重做布局是我最后的计划,会让你知道这是怎么回事。会让你知道这是怎么回事。
    • 还没有。而且我认为我的形象在这里引起了一些混乱。滚动的内容区域实际上是body 标签。我实际上没有固定高度的内容区域。所以导航实际上不能被移出它。但我会尝试将导航移出其当前父级,看看是否可行。
    • 谢谢,但这种方法也不起作用。似乎身体高度似乎大于视口高度。在此尝试其他几种变体。
    【解决方案4】:
     <div class="main_div">
        <div class="scrollble">
        // scrollable content
        some text goes heresome text goes here
        some text goes heresome text goes here
        some text goes heresome text goes here
        some text goes heresome text goes here
        some text goes heresome text goes here
        some text goes heresome text goes here
        some text goes heresome text goes here
        some text goes heresome text goes here
        </div>
        <div class="footer">
        // fixed footer
        </div>
    </div>
    

    // CSS

    .main_div {
     height: 100vh;
     position: fixed;
     }
    .scrollble {
     height: 95vh;
     overflow-y:auto; 
     border: 1px solid #000;
    }
    .footer {
     height: 5vh; 
    position: fixed; 
    width: 100%; 
    }
    

    【讨论】:

      【解决方案5】:

      我在之前的网络项目中使用过position:sticky;。事实证明它在大多数情况下都有效。 Can you use position sticky?

      要尝试的另一件事(我必须为 FireFox 和 iOS Safari 执行此操作以修复一些错误)是将整个内容包装在 &lt;div&gt; 中,包括固定元素(页眉/页脚,...)结果它们相对于它们的父级是固定/粘性的,一旦父级结束,固定和/或粘性破坏导致各种错误。

      如果这个简单的修复不起作用,我会从@RandomChannel 寻求答案。

      【讨论】:

      • 我将内容包装在一个 div 中,但这似乎不起作用。我现在正在尝试其他一些变体。
      猜你喜欢
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2023-03-28
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多