我有以下用户界面:
ui <- navbarPage(
title="Foo",
fluid=T,
# For positioning of the progress bar notification
tags$head(
tags$style(HTML(
".shiny-notification {
height: 100px;
width: 800px;
position:fixed;
top: calc(50% - 50px);
left: calc(50% - 100px);
}"
)),
# tags$style for font size of column headers
tags$style(HTML(
".dataTables_wrapper th {
font-size: 10px;
}"
)),
# tags$link and tags$script are included so that we can use KaTeX to render LaTeX in DataTables
tags$link(
rel = "stylesheet",
href = "https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.css",
integrity = "sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ",
crossorigin = "anonymous"
),
tags$script(
defer = "",
src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/katex.min.js",
integrity = "sha384-VQ8d8WVFw0yHhCk5E8I86oOhv48xLpnDZx5T9GogA/Y84DcCKWXDmSDfn13bzFZY",
crossorigin = "anonymous"
)
),
useShinyjs(), # must be called once for progress bar and similar elements to work
someOtherUiElement()
)
navbarPage
误解了使用 tags$head
和 useShinyjs
作为 UI 元素的部分,因此最终会在实际 UI 按钮的左侧创建这些不可见的、方形的、非功能性的 UI 元素。我怎样才能防止这种情况发生?所附的屏幕截图显示了它所指的导航窗格的部分。我圈出了两个不可见元素所在的区域,并选择了右侧的一个。
参考 YBS 和 Limey,他们的方法很有帮助。我不明白的是,虽然闪亮的 UI 元素可能感觉它们的行为相似,但它们的签名确实允许非常不同的事情。因此,尽管 HTML 标签和
useShinyjs()
实际上并不占用任何空间并且是不可见元素,但它们在 fluidRow
中是允许的,但在 navbarPage
中是禁止的。目前,将它们放在子模块中效果很好。我还没有尝试过,一旦我在同一层次结构中添加另一个模块,这是否会破坏事情,但我猜测将 navbarPage
包装在 fluidPage
中可能会解决这个问题。
TL;DR:将对应用程序在
fluidRow
之外的任何容器中运行所需的函数进行调用(可能还有 navbarPage
?)。