@chrisbodon You can try to use the ion-item html properties, like item-content, to allow elements aside from labels and inputs inside it:
<ion-list>
<ion-item>
<ion-grid item-content>
<ion-row>
<ion-col col-3><ion-input type="text" value=""></ion-input></ion-col>
<ion-col col-3><ion-input type="text" value=""></ion-input></ion-col>
<ion-col col-3><ion-input type="text" value=""></ion-input></ion-col>
<ion-col col-3><ion-input type="text" value=""></ion-input></ion-col>
</ion-row>
</ion-grid>
</ion-item>
</ion-list>
Just place item-content in the element directly inside the ion-item.
You can check in your browser inpector to see if your code is placed inside the ion-item in the generated HTML.
More information about ion-item here.