ollija / react-native-sortable-grid

Drag-drop-sortable grid view for react native
MIT License
441 stars 173 forks source link

itemHeight didn't work #35

Open zim-lee opened 6 years ago

zim-lee commented 6 years ago

I set itemHeight property, but it didn't work,

harrisrobin commented 6 years ago

@zim-lee we can't really help you if you don't even copy paste a snippet of your code.

zim-lee commented 6 years ago

@harrisrobin the example code can be review

rikur commented 6 years ago

+1 itemHeight doesn't change a thing. I have both itemsPerRow and itemHeight set -- blocks are always squares.

rikur commented 6 years ago

FYI: I was just being stupid. I used property blockWidth instead of itemWidth.

cmeredith commented 6 years ago

+1 this is not working for me either. I've set itemsPerRow which works perfectly but itemHeight doesn't do anything. @tqc any advice?

<SortableGrid
  itemsPerRow={2}
  itemHeight={50}
>
masary2989 commented 6 years ago

This is in ollija/react-native-sortable-grid/index.js

    console.log("Calculating grid size");
    `if (this.props.itemWidth && this.props.itemWidth < nativeEvent.layout.width) {`
      this.itemsPerRow = Math.floor(nativeEvent.layout.width / this.props.itemWidth)
      this.blockWidth = nativeEvent.layout.width / this.itemsPerRow
      this.blockHeight = this.props.itemHeight || this.blockWidth
    }
    else {
      this.blockWidth = nativeEvent.layout.width / this.itemsPerRow
      this.blockHeight = this.blockWidth
    }
    if (this.state.gridLayout != nativeEvent.layout) {
      this.setState({
        gridLayout: nativeEvent.layout,
        blockWidth: this.blockWidth,
        blockHeight: this.blockHeight
      })
    }
  }

First, itemHeight dosen't work without itemWidth

Second, In first Conditional branch, if (this.props.itemWidth && this.props.itemWidth < nativeEvent.layout.width) { It seems that your itemWidth must be smaller than nativeEvent.layout.width.

So you should add itemWidth and try various numbers on itemWidth.

          <SortableGrid
            blockTransitionDuration={200}
            activeBlockCenteringDuration={200}
            itemWidth={100}
            itemHeight={84}
            dragActivationTreshold={300}
            onDragRelease={ (itemOrder) => console.log("Drag was released, the blocks are in the following order: ", itemOrder) }
            onDragStart={ () => console.log("Some block is being dragged now!") } >

This is works on my app. Changed to a rectangle.

2018-06-12 14 41 15
yc507 commented 6 years ago

The code on NPM is not the latest, cope the index.js from GitHub it's worked

bomei commented 5 years ago

@masary2989 's answer just save my life.

SivaprakashJeyaraj commented 4 years ago

Hi, Can you please update this code for dynamic width... Like 75% & 25% of elements in single row.