The magic of fixed size modifier in SwiftUI

栏目: IT技术 · 发布时间: 5年前

内容简介:You might saw some examples of fixed size modifier usages while trying to fix the issue with multiline text inWe try to simulate the rendering of very long text. I also use the frame modifier to limit available space. As you can see in the example above, t

You might saw some examples of fixed size modifier usages while trying to fix the issue with multiline text in SwiftUI . But do you know what exactly fixed size modifier does? How does it work? Today I want to talk about all the magic and power behind the fixed size modifier.

Basics

SwiftUI documentation says that the fixed size modifier fixes this view at its ideal size. I think the best way to understand how the fixed size modifier works is the visual example. Let’s take a look at a small sample.

struct Example1: View {
    var body: some View {
        Text("Very very very long text!")
            .font(.title)
            .frame(width: 100, height: 100, alignment: .center)
            .border(Color.red)
    }
}

We try to simulate the rendering of very long text. I also use the frame modifier to limit available space. As you can see in the example above, the text doesn’t fit the available space, and the SwiftUI layout system decides to truncate it.

The magic of fixed size modifier in SwiftUI

To learn more about the logic behind the layout system of SwiftUI, take a look at my “Layout priorities in SwiftUI” post .

Now let’s take a look at the same example but with the fixed size modifier attached to the text component.

struct Example1: View {
    var body: some View {
        Text("Very very very long text!")
            .font(.title)
            .fixedSize()
            .frame(width: 100, height: 100, alignment: .center)
            .border(Color.red)
    }
}

As you can see in the code sample above, the fixed size modifier allows to text to ignore the frame and use as much space as needed to render the content. The text component simply exceeds the provided frame by continuing the rendering outside of the frame. You can use the clipped modifier after the frame modifier to cut the content inside the provided rectangle.

The magic of fixed size modifier in SwiftUI

To learn more about clipping and changing the shape of a view, take a look at my “Customizing the shape of views in SwiftUI” post .

SwiftUI provides us two versions of fixed size modifier. The first one, which we already used in previous examples, doesn’t have any parameters and allows the view to grow both vertically and horizontally. The second variant of the fixed size modifier accepts two boolean parameters. These parameters describe the axis of expansion.

struct Example1: View {
    var body: some View {
        Text("Very very very long text!")
            .font(.title)
            .fixedSize(horizontal: true, vertical: false)
            .frame(width: 100, height: 100, alignment: .center)
            .border(Color.red)
    }
}

Here we use the fixed size modifier to allow the view to expand horizontally. This level of control lets us use the fixed size modifier as an alternative to layout priorities in SwiftUI . Let’s take a look at another example.

struct Example2: View {
    var body: some View {
        HStack {
            Text("Hello World!")
                .font(.headline)
            Text("Hello World!")
                .font(.largeTitle)
            Text("Hello World!")
                .font(.title)
        }.lineLimit(1)
    }
}

In the example above, we have the horizontal stack that contains three text labels. The layout system can’t render all of them without truncating because labels have pretty big font sizes. Assume that we want to display the second label without truncating and allow to SwiftUI cut other labels. We have at least two solutions here. The first one is layout priority, and the second one is the fixed size modifier.

struct Example2: View {
    var body: some View {
        HStack {
            Text("Hello World!")
                .font(.headline)
            Text("Hello World!")
                .font(.largeTitle)
                .fixedSize(horizontal: true, vertical: false)
            Text("Hello World!")
                .font(.title)
        }.lineLimit(1)
    }
}

Conclusion

As you can see, the fixed size modifier provides us much more control over the layout system than layout priorities. Sometimes it can be more beneficial when you need to control the growth of the view in some specific direction. I hope you enjoy the post. Feel free to follow me on Twitter and ask your questions related to this post. Thanks for reading, and see you next week!


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

UX设计之道

UX设计之道

[美]Russ Unger、[美]Carolyn Chandler / 陈军亮 / 人民邮电出版社 / 2015-4-1 / 49.00元

本书的目标是提供一些基本的工具及应用场景,帮助你及工作团队一起来使用这些工具和方法。正如你将在本书很多章节中看到的那样,我们没有尝试包罗万象、迎和所有的人,但我们试图给你提供一些用户体验(UX)设计师需要具备的核心信息和知识。除了我们自己的案例外,我们还提供了一些帮你了解如何开始准备基本材料的案例,让你可综合这些信息来创建某些更新、更好或者是更适合自己意图的东西。一起来看看 《UX设计之道》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试