uni-app x图片在widthFix模式下存在间距问题

uni-app x图片在widthFix模式下存在间距问题

产品分类

uni-app x/App

PC开发环境

参数
操作系统 Windows
操作系统版本号 win10

手机开发环境

参数
系统 Android
系统版本号 Android 14
手机厂商 小米
手机机型 小米13

HBuilderX

参数
版本号 3.99
安装路径 F:\tool\develop\HBuilderX.3.96.2023110403\HBuilderX

示例代码

<template>  
    <list-view class="list" :rebound="false" :scroll-y="true" :custom-nested-scroll="true"  
        @scrolltolower="loadData(null)">  
        <list-item class="list-item" v-for="(item, index) in dataList" :key="item.id">  
            <image :src="item.image_url" mode="widthFix" @click="handPrive(index)"></image>  
        </list-item>  
    </list-view>  
</template>  

<script>  
type ListItem = {  
    id : number,  
    photo_id : number,  
    image_url : string,  
}  
const PAGE_SIZE = 10; // 最大值 10  

export default {  
    data() {  
        return {  
            id: '',  
            loading: false,  
            dataList: [] as ListItem[],  
            isEnded: false,  
            loadingError: '',  
            $currentPage: 1  
        }  
    },  
    onLoad(options : OnLoadOptions) {  
        if (options.has('id')) {  
            this.id = options.get('id')!  
        }  
        this.loadData(null)  
    },  
    methods: {  
        refreshData(loadComplete : (() => void) | null) {  
            this.loading = false  
            this.isEnded = false  
            this.dataList.length = 0  
            this.$currentPage = 1  
            this.loadData(loadComplete)  
        },  
        loadData(loadComplete : (() => void) | null) {  
            if (this.loading || this.isEnded) {  
                return  
            }  
            this.loading = true  
            const data = [  
                { "id": 101, "image_url": "https://i.miji.bid/2024/01/19/49cc865cc0f70d95a224199bb47d1aa6.jpeg", "photo_id": 1 },  
                { "id": 100, "image_url": "https://i.miji.bid/2024/01/19/e2803f895f722f4b63d5d314e472bf50.jpeg", "photo_id": 1 },  
                { "id": 99, "image_url": "https://i.miji.bid/2024/01/19/722ddb40a847e8853e302c8c8e998184.jpeg", "photo_id": 1 },  
                { "id": 98, "image_url": "https://i.miji.bid/2024/01/19/6d5a975ad06ac3d5f34c25b016531dc4.jpeg", "photo_id": 1 },  
                { "id": 97, "image_url": "https://i.miji.bid/2024/01/19/42cb65c413e5e3198d928d013a791ff0.jpeg", "photo_id": 1 },  
                { "id": 96, "image_url": "https://i.miji.bid/2024/01/19/24e6f93990cf94c4a2af36a6c3b3d9ba.jpeg", "photo_id": 1 },  
                { "id": 95, "image_url": "https://i.miji.bid/2024/01/19/2d9172f043e22066347c62497bc47c1e.jpeg", "photo_id": 1 },  
                { "id": 94, "image_url": "https://i.miji.bid/2024/01/19/bb5ecb79a58ad39478b89680d803e99a.jpeg", "photo_id": 1 },  
                { "id": 93, "image_url": "https://i.miji.bid/2024/01/19/120fcd80a960d6cd3ff801e05f65b3b8.jpeg", "photo_id": 1 },  
                { "id": 92, "image_url": "https://i.miji.bid/2024/01/19/3bb1a6c576acd7b3ea5c27e448c0a3d1.jpeg", "photo_id": 1 },  
            ] as ListItem[]  
            this.dataList = data  
            this.isEnded = true  
            this.loading = false  
            if (loadComplete != null) {  
                loadComplete()  
            }  
        },  
        handPrive(current : number) {  
            const urls = [] as string[]  
            this.dataList.forEach((el : ListItem) => {  
                urls.push(el.image_url)  
            })  
            uni.previewImage({  
                urls,  
                current,  
                indicator: 'number',  
                loop: true  
            })  
        }  
    }  
</script>  

<style lang="scss" scoped>  
.list {  
    flex: 1;  
    background-color: #fff;  
}  
</style>

操作步骤

  • 请求漫画图片列表(分页加载)
  • 渲染widthFix模式
  • 图片之间出现见图
  • 页面滚动隐藏元素在展示间距消失

预期结果

  • 渲染后图片无间距

实际结果

  • 图片有间距

bug描述

图片列表全部采用widthFix时候,会有间距,当页面滚动元素隐藏后在展示间距消失,具体请参考压缩包中视频


更多关于uni-app x图片在widthFix模式下存在间距问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

HBuilderX 4.02.2024030621-alpha 已修复。

更多关于uni-app x图片在widthFix模式下存在间距问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


会不会不是widthFix的原因,图片不在任何东西,有时候下面会有部分留白,使用块元素就可以解决

image是放在list-item下面的,感觉有点关系,并且图片高度并没有完全加载。现在临时解决方案是把图片的宽高比例保存了起来,对image设置指定宽高

测试例的css 补充下 class=“list”、class=“list-item”

以补充.list, 发现问题是list-item高度在图片未渲染完成就固定了高度, 图片widthFix后会变高而list-item高度未变造成图片展示不完全

大佬,我这个问题很紧急,可以去看下吗?【报Bug】1.hbuliderx3.96 夜间模式开启后,安卓10以下的手机夜间模式不生效正常,但是该手机的nvue也横屏时会重载nvue页面

uni-app 中使用 image 组件时,如果设置了 mode="widthFix",可能会遇到图片在显示时出现间距的问题。这通常是由于图片的 display 属性默认为 inline-block,导致图片下方出现一些额外的空白间距。

解决方法

  1. 设置 displayblockimage 组件的 display 属性设置为 block,可以消除图片下方的空白间距。

    <image src="your-image-url" mode="widthFix" style="display: block;"></image>
    
  2. 使用 vertical-align 属性: 如果不想改变 display 属性,可以尝试将 vertical-align 属性设置为 topbottom,以消除图片下方的空白。

    <image src="your-image-url" mode="widthFix" style="vertical-align: top;"></image>
    
  3. 使用 line-height 属性: 将父元素的 line-height 设置为 0,也可以消除图片下方的空白。

    <view style="line-height: 0;">
      <image src="your-image-url" mode="widthFix"></image>
    </view>
    
  4. 使用 font-size 属性: 将父元素的 font-size 设置为 0,也可以消除图片下方的空白。

    <view style="font-size: 0;">
      <image src="your-image-url" mode="widthFix"></image>
    </view>
    
  5. 使用 flex 布局: 如果图片的父元素使用了 flex 布局,可以尝试调整 align-itemsjustify-content 属性来消除间距。

    <view style="display: flex; align-items: flex-start;">
      <image src="your-image-url" mode="widthFix"></image>
    </view>
回到顶部