I want to thank you for posting this question and to also thank Chris C for his solution. I ended combining the information here with what's written in the "Mastering the Refresh Method" of the iScroll 4 page to solve a couple of problems I was having.
For one: I was bringing in data via ajax to populate my scroller. It was populating into a scroller div as shown on the iScroll 4 examples page:
<div id="wrapper">
<div id="scroller">
<ul>
<li></li>
...
...
</ul>
<ul>
<li></li>
...
...
</ul>
</div>
</div>
Unfortunately, a scrollbar wasn't showing up and when you tried to scroll at first it would snap back to the top. So, I added this after the initialization:
setTimeout(function () {
myScroll.refresh();
}, 0);
That solved my scrollbar not appearing issue.
Secondly, I have several filters that remove/update the items being shown in the scroller. I thought adding just myScroll.refresh(); would solve the problem. Unfortunately,
It was causing iScroll to create multiple versions of the scrollbar. Based on Chris C's comment I figured out that I needed to destroy the iScroll first then reconstruct it. And let's not forget you still need to refresh. Here's what I added at the end of my update function:
myScroll.destroy();
myScroll = null;
myScroll = new iScroll('resultsDisplay');
setTimeout(function() {
myScroll.refresh();
},0);
And now everything works as expected!