xcode 如何调整高度和宽度的视图使用约束为不同的屏幕?

u7up0aaq  于 2023-06-24  发布在  其他
关注(0)|答案(2)|浏览(145)

我很新xocde 6 & autolayout.我正在为多个设备设计屏幕.我有一些意见,如图像,文本字段.我已经desgined他们为iPhone.我已经添加了一些固定高度&宽度constraints. So height & width remian fix for all devices.I want to change height & width of view acrding to screen size.I have tried one method which was
1.使宽度等于父视图并给予乘数0.5。
1.保持固定高度。
1.给予纵横比。
这种方式视图是对齐的,但它的高度是固定的。我也使用了前导空格,尾随空格,但这种方式有时会达到意想不到的结果。那么有没有更好的方法呢?我真的很难搞清楚。

093gszye

093gszye1#

2023年及以后

我强烈建议你使用**SwiftUI**,它超级容易使用,也超级快的结果。我甚至不能把它和其他选项比较。SwiftUI借助Swift的强大功能,帮助您在所有Apple平台上构建外观精美的应用程序-而且代码少得惊人。您只需使用一套工具和API,就可以在任何Apple设备上为每个人带来更好的体验。
SwiftUI使用声明式语法,因此您可以简单地声明您的用户界面应该做什么。例如,您可以写您想要一个由文本字段组成的项目列表,然后描述每个字段的对齐方式、字体和颜色。您的代码比以往任何时候都更简单、更易于阅读,从而节省了您的时间和维护。

import SwiftUI

struct AlbumDetail: View {
    var album: Album

    var body: some View {
        List(album.songs) { song in 
            HStack {
                Image(album.cover)
                VStack(alignment: .leading) {
                    Text(song.title)
                    Text(song.artist.name)
                        .foregroundStyle(.secondary)
                }
            }
        }
    }
}

这种声明式的风格甚至适用于像动画这样的复杂概念。只需几行代码即可轻松地将动画添加到几乎任何控件中,并选择一系列现成的效果。在运行时,系统处理创建平滑移动所需的所有步骤,甚至处理用户交互和动画中的状态更改。动画制作如此简单,您将寻找新的方法来使您的应用变得生动。

支持UIKit和AppKit

SwiftUI旨在与UIKit和AppKit一起工作,因此您可以在现有应用程序中逐步采用它。当需要构建用户界面的新部分或重建现有部分时,您可以使用SwiftUI,同时保留代码库的其余部分。如果你想使用SwiftUI中没有提供的界面元素,你可以将SwiftUI与UIKit和AppKit混合使用,以利用所有世界的最佳优势。

SwiftData

SwiftData使使用声明性代码持久化数据变得容易。您可以使用常规Swift代码查询和过滤数据。它的设计是为了与SwiftUI无缝集成。SwiftData使用Core Data的成熟存储架构,因此您可以在具有相同底层存储的同一应用中使用两者。当你准备好了,Xcode可以将你的Core Data模型转换成类,以便与SwiftData一起使用。

资源

我的旧答案

如果你是新手,我建议你使用PureLayout。您可以在项目中使用cocoapods或Carthage。有了这个库,你可以非常容易地为不同的屏幕设置这个约束。在github项目中有一个示例项目,您可以在其中找到许多不同的场景。以下是项目的github页面:
https://github.com/smileyborg/PureLayout
下面是一些代码片段的例子@deepak kumar:

- (void)updateViewConstraints
{
    if (!self.didSetupConstraints) {
        // Apply a fixed height of 50 pt to two views at once, and a fixed height of 70 pt to another two views
        [@[self.redView, self.yellowView] autoSetViewsDimension:ALDimensionHeight toSize:50.0];
        [@[self.blueView, self.greenView] autoSetViewsDimension:ALDimensionHeight toSize:70.0];
        
        NSArray *views = @[self.redView, self.blueView, self.yellowView, self.greenView];
        
        // Match the widths of all the views
        [views autoMatchViewsDimension:ALDimensionWidth];
        
        // Pin the red view 20 pt from the top layout guide of the view controller
        [self.redView autoPinToTopLayoutGuideOfViewController:self withInset:20.0];
        
        // Loop over the views, attaching the left edge to the previous view's right edge,
        // and the top edge to the previous view's bottom edge
        [[views firstObject] autoPinEdgeToSuperviewEdge:ALEdgeLeft];
        UIView *previousView = nil;
        for (UIView *view in views) {
            if (previousView) {
                [view autoPinEdge:ALEdgeLeft toEdge:ALEdgeRight ofView:previousView];
                [view autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:previousView];
            }
            previousView = view;
        }
        [[views lastObject] autoPinEdgeToSuperviewEdge:ALEdgeRight];
        
        self.didSetupConstraints = YES;
    }
    
    [super updateViewConstraints];
}

我相信,如果你能从现在开始,它会更容易为您通过自动布局头痛。

de90aj5v

de90aj5v2#

我不知道你想问什么,但这听起来像是一个 * 自动布局 * 问题,如果你不想让你的 * 文本视图 * 填满整个屏幕,请继续在你的Main.故事板中选择文本视图 ,然后点击Pin**按钮,就像这样:

请注意,所有约束都已启用,这意味着此文本视图将固定在iOS屏幕的边缘。
如果您想稍后编辑这些约束,请继续并转到 * 大小检查器 *,您可以直接单击约束:

相关问题