Whenever I hit a designer’s block I find that the best strategy forward is to start again with a clean slate. The difference between a writer’s block and a designer’s block is that in the case of a writer’s block there is usually a blank screen in-front of you, whereas in the case of a designer’s block there’s something already there, except it doesn’t really work and you can see no way of making it better.
The problem is that what you’ve got there is framing the solution for you. You keep tweaking things but you’re only tweaking it a little, not making sweeping changes. And that’s the thing: making sweeping changes to an existing design is very difficult and awkward because the nature of a good design is that things have to fit in a certain relation to each other–that’s what makes the whole work. The design in-front of you may not work as you’ve intended, but the solution itself is making use of all the parts in a certain order–this order being the solution, the wrong solution. The wrong solution implemented well is difficult to change.
When this happens I just comment out the whole portion of the code or grab a blank sheet of paper and work back up from nothing. Start thinking: what does the user want to see? What’s the most important thing they need on this page? The answers then shape your new solution. The previous design is only awkward because it doesn’t answer those questions but is instead focusing on something else. By starting with a clean slate you can throw away the old assumptions and constraints and work within a new framework.