HarmonyOS Scroll嵌套Web,Web内容高度自适应,整体页面无法一起滚动

HarmonyOS
14h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

可以参考下面demo

import geoLocationManager from '@ohos.geoLocationManager';
import BusinessError from "@ohos.base";
import web_webview from '@ohos.web.webview'
import business_error from '@ohos.base';

@Entry
@Component
struct Index {
  geocodeRequest: geoLocationManager.GeoCodeRequest = { "description": "常州市万达广场", "maxItems": 10 }
  reverseGeoCodeRequest: geoLocationManager.ReverseGeoCodeRequest = {
    latitude: 31.734816113942514,
    longitude: 119.94373220220504,
    locale: "zh",
    maxItems: 10
  }
  controller: web_webview.WebviewController = new web_webview.WebviewController()

  build() {
    Scroll() {
      NavDestination() {

        Stack({ alignContent: Alignment.Top }) {
          Flex() {
            Image($r('app.media.foreground'))
              .height(32)
              .width(32)
              .objectFit(ImageFit.Contain)
              .margin({ left: 8 })
              .onClick(() => {
                // RouterTypeHandler.pop()
              })

            Stack({ alignContent: Alignment.End }) {
              Image($r('app.media.foreground'))
                .width(35)
                .height(35)
                .objectFit(ImageFit.Contain)
                .onClick(() => {
                })
            }
            .height('100%')
            .layoutWeight(1)
          }
          .height(48)
          .width('100%')
          .backgroundColor(Color.Transparent)
          .zIndex(2)

          Column() {
            Image($r('app.media.startIcon'))
              .height(220)// .width(MatchParent)
              .objectFit(ImageFit.Cover)
            Text('title')
              .fontColor(Color.Black)
              .fontSize(24)
              .fontWeight(FontWeight.Bold)
              .margin({ top: 18 })
              .padding({
                left: 15,
                top: 10,
                right: 15,
                bottom: 10
              })
            RelativeContainer() {
              Image($r('app.media.startIcon'))
                .id('iv_head')
                .width(36)
                .height(36)// .alignRules({ left: AlignParent.Start, top: AlignParent.Top, bottom: AlignParent.Bottom })
                .borderRadius(50)
              Image($r('app.media.startIcon'))
                .id('iv_office_v')
                .width(15)
                .height(15)
              // .alignRules({ right: IdAlign.End('iv_head'), bottom: IdAlign.Bottom('iv_head') })
              Text('name')
                .id('name')
                .fontSize(14)
                .fontWeight(FontWeight.Bold)// .alignRules({ left: IdAlign.End('iv_head'), top: IdAlign.Top('iv_head') })
                .margin({ left: 8 })
              Image($r('app.media.startIcon'))
                .id('iv_flag1')
                .height(2000)
                .width(30)// .alignRules({ left: IdAlign.End('name'), top: IdAlign.Top('name'), bottom: IdAlign.Bottom('name') })
                .margin({ left: 5 })
              Image($r('app.media.startIcon'))
                .id('iv_flag2')
                .height(14)
                .width(30)// .alignRules({ left: IdAlign.End('iv_flag1'), top: IdAlign.Top('name'), bottom: IdAlign.Bottom('name') })
                .margin({ left: 4 })
              Text('description')
                .id('description')
                .fontSize(10)
                .fontColor(Color.Red)// .alignRules({ left: IdAlign.End('iv_head'), top: IdAlign.Bottom('name') })
                .margin({ left: 8, top: 4 })

              Button('关注', { type: ButtonType.Normal, stateEffect: false })
                .id('follow')
                .height(35)
                .width(80)
                .fontColor(Color.Red)
                .fontSize(14)
                .backgroundColor(Color.White)// .alignRules({ right : 2, top: 2, bottom: 2 })
                .border({ width: 0.5, color: Color.Red, radius: 4 })
            }
            .height(56)
            .width(100)
            .padding({ left: 20, right: 20 })

            Column() {
              Button('loadData')
                .onClick(() => {
                  try {
                    this.controller.loadData(
                      "<html><body bgcolor=\"white\"> <div>" +
                        '<p>演出团体|xxx</p>' +
                        '<p>艺术总监|xxxx</p>' +
                        '<p>音乐|xxxx</p><p>编舞|xxx</p>' +
                        '<p data-spm-anchor-id=' + "\"a2ofd.project.0.i19.3ebe130ezfShsU\">&nbsp;</p>" +
                        "<p>我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章我是段落文章</p>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/70fab3288cbedb9cc960bc478cb480ca.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/></p>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/cb7b1790b3b2f42aee808ffa6ee7ab4f.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/></p>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/171e7f01dddcb05ca85c6c54fc05b438.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/></p><p>俄罗斯芭蕾国家剧院如今拥有众多优秀舞者,其中包括一些国际芭蕾舞比赛的杰出艺术家、参与者和获奖者。舞台上他们的表演令人眼花缭乱,其中包括安娜·谢尔巴科娃、尤利娅·兹维亚吉娜、德米特里·科特明、马克西姆·福明、弗拉基米尔·米涅耶夫等名字闪耀着光芒。每年都有来自俄罗斯最优秀的舞蹈人才加入俄罗斯芭蕾舞团的表演队伍,他们为舞团带来了新的活力和创意。此外,来自日本、意大利和美国等国家的艺术家也慕名而来,加入俄罗斯芭蕾国家剧院,为观众们呈现多样化的舞蹈风格和精彩表演。他们的加入丰富了舞团的文化交流和艺术交流,共同创造了优秀的舞台作品。</p>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/c280d34722cd6d670dd5dc67d92fc04e.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/></p>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/733a06df93cda35519d1b9b04af1f50d.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/></p>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/37e5cdaec57855221399cf9bc881404d.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/8c75fe805d88bcb8d05a0c6e5c217c95.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/>" +
                        "<p><img src=\"http://img.dahepiao.com/uploads/image/2024/03/08/02dcc24a7fd20437839564ae1209af2b.png\" style=\"-webkit-tap-highlight-color: transparent; box-sizing: border-box; border: 0px none; vertical-align: top; display: block; margin: 0px auto; max-width: 100%;\"/></p><p><br/></p>" +
                        "</div></body></html>",
                      "text/html",
                      "UTF-8"
                    );
                  } catch (error) {
                    let e: business_error.BusinessError = error as business_error.BusinessError;
                    console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);
                  }
                })
              Web({
                src: 'http://www.huawei.com/',
                controller: this.controller,
                renderMode: RenderMode.SYNC_RENDER
              })// Web({ src: 'www.huawei.com', controller: this.controller})
                // .width('100%')
                .javaScriptAccess(true)
                .databaseAccess(true)
                .domStorageAccess(true)
              // .layoutWeight(1)
              // .layoutMode(WebLayoutMode.FIT_CONTENT)
              // .hitTestBehavior(HitTestMode.None)
              // .overScrollMode(OverScrollMode.NEVER)
              // .height('100%')
            }
            .height(200)
            .width('100%')
          }
          .alignItems(HorizontalAlign.Start)

          .width('100%')
          .zIndex(1)
        }
      }
      .width('100%')
      .height('500%')
      .padding({ top: AppStorage.get<number>('statusBarHeight') })
      .hideTitleBar(true)
    }
    .scrollable(ScrollDirection.Vertical) // 滚动方向为垂直方向
    .scrollBar(BarState.On) // 滚动条常驻显示
    .scrollBarColor(Color.Gray) // 滚动条颜色
    .scrollBarWidth(10) // 滚动条宽度
    .edgeEffect(EdgeEffect.Spring)

  }
}

Web自适应的时候要给予父组件一定高度这样web组件才能自适应高度,scroll包裹的组件也需要高度设置但如果是100%的话则滑动不超过页面最大高度(相当于只在一个100%高度的页面内滑动),可以运行上述代码查看结果

分享
微博
QQ
微信
回复
12h前
相关问题
HarmonyOS web高度自适应内容高度
97浏览 • 1回复 待解决
HarmonyOS Web高度自适应问题
786浏览 • 1回复 待解决
HarmonyOS web组件自适应高度问题
1039浏览 • 1回复 待解决
HarmonyOS web组件怎么自适应高度
28浏览 • 1回复 待解决
HarmonyOS scroll嵌套list页面无法滑动
40浏览 • 1回复 待解决
Web组件如何实现高度自适应
1072浏览 • 1回复 待解决
HarmonyOS Grid高度根据内容自适应
93浏览 • 1回复 待解决
HarmonyOS List高度根据内容自适应
9浏览 • 0回复 待解决
HarmonyOS RelativeContainer无法自适应高度
405浏览 • 1回复 待解决
自适应页面滚动如何实现
508浏览 • 1回复 待解决