Giter Club home page Giter Club logo

Comments (11)

tolo avatar tolo commented on May 29, 2024

Also a great suggestion - this would clearly be a useful thing to have and I'll definitely look into adding that.

Can you elaborate on what you mean by a block like layout?

from interfacss.

tbrannam avatar tbrannam commented on May 29, 2024

Well I was imagining being able to describe layout of child objects such that that parent places them in series based on the child's size. Not unlike the default html behavior in the browser.

Some examples would be a set of UIButtons in a toolbar like container - where the toolbar container would layout the children next to each other, possibly adding space between them if they don't flex.
This probably could be done directly today with InterfaCSS as is, but required manually maintained placement. I was thinking some of the layouts possible with the CSS flex/box model.

I've though about other layouts like the W3C Grid layout.

I'm pretty good at UIKit - but my CSS knowledge is very basic, so I may not be using the correct CSS terminology.

I suspect that there would need to be two passes during the styling phase to make this work,

from interfacss.

tbrannam avatar tbrannam commented on May 29, 2024

So I suspect that if layout managers were added that there would be two passes through the view tree during applyStyling - since the styles affecting size could be changed due to style.

I suspect that in the first pass that the views' frame wouldn't be touched - but the rest of the styles would be adjusted.

from interfacss.

tolo avatar tolo commented on May 29, 2024

Back when I added support for the xml based view definition file, I actually had ideas similar to this (i.e. use of custom layouts). However, I ended up with the conclusion that there already is a component that handles such things pretty well: UICollectionView. The only missing piece would be a nice way to configure the layout (UICollectionViewFlowLayout as well as other custom/pre-defined layouts), and possibly the layout attributes for individual items. This may be something I'll revisit going forward.

from interfacss.

tbrannam avatar tbrannam commented on May 29, 2024

The UICollectionView approach might work, but I think perhaps just moves the problem. I've started experimenting here: https://github.com/tbrannam/InterfaCSS/commit/c8feae40e600f9aebe2b4061f2a585956715e65c in the develop branch -- clearly I've introduced side effects. Could you comment on the approach?

Cheers

from interfacss.

tbrannam avatar tbrannam commented on May 29, 2024

Updated https://github.com/tbrannam/InterfaCSS/commit/1a4bb649a292fbc9226ef833c4ece81cf5092836

from interfacss.

tolo avatar tolo commented on May 29, 2024

Thanks for your input on this. Support for an easier way of handling layouts is certainly an interesting area, and I've also had thoughts on using implementations of layoutSubviews to support that. However, lately I've also come to the conclusion that it sometimes is better to use existing solutions, such as UICollectionView, that people are familiar with, rather than inventing custom solutions. But there are of course aspects such as performance and ease of configurability etc to consider, which might make a custom solution more interesting. When time permits I will dive a bit deeper into this (and look at your experiment branch in more detail), but at the very minimum, I'll probably add some sort pluggable layout handling mechanism.

from interfacss.

tbrannam avatar tbrannam commented on May 29, 2024

Great. Perhaps a pluggable layout mechanism would be best, especially since there are so many potential solutions.

Maybe I give a more concrete use case of a UITableViewCell where in landscape mode I'd like label1 and label 2 to be placed on a single line. In order to implement this, I'd need a way to apply a style that measures the content of UILabel1, UILabel2, and UILabel3 and allocate space between them all. In this case, it wouldn't be appropriate to have a UICollectionView embedded in a UITableViewCell.

Perhaps I've missed something in the style markup. Can you express this with the current style language?

// portrait - similar to structure on prototypeExampleCell
+---------------------------------------------------+
| UILabel1(some variable length text)               |
|                                          UILabel3 |
| UILabel2(some variable length text)               |
+---------------------------------------------------+
// landscape
+-------------------------------------------------------------------------------------+
|                                                                                     |
| UILabel1(some variable length text) UILabel2(some variable length text)    UILabel3 |
|                                                                                     |
+-------------------------------------------------------------------------------------+

from interfacss.

tolo avatar tolo commented on May 29, 2024

Yeah, you're right, a collection view wouldn't be very suitable for that scenario. And you haven't missed anything - the landscape layout can't quite be expressed the way you want it with the current styling language.

I guess this particular case can probably be solved by using attributed strings, or autolayout and different nibs for different orientations. However, I've just added support for auto sized views now, and I'm going to take a deeper look at either using some sort of layout manager or other ways of expressing relative insets (relative to other views that parent).

from interfacss.

tbrannam avatar tbrannam commented on May 29, 2024

I'm having some success in using the hooks for customization to implement layouts outside of InterfaCSS .

from interfacss.

tolo avatar tolo commented on May 29, 2024

With the recent addition of ISSLayout, I think this issue probably can be closed.

from interfacss.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.