标签: adaptive-layout

框架"在运行时会有所不同"....这不是重点吗?

也许争取一个"无警告"项目是徒劳的,但我对自适应布局/自动布局很紧张,我不得不尝试并压制这些警告.

我有一个uiview,我希望根据纵向屏幕宽度动态调整大小.我的应用程序设置在通用的构建信息,仅限肖像(和颠倒).我通过以下方式限制了uiview:

  1. 将视图中心与Superview的X中心对齐
  2. 使视图的宽度与Superview的宽度成比例
  3. 使视图的宽高比约束为1:1
  4. 鉴于视图对superview顶部的垂直约束

有关详细信息,请参阅下面的截图.

所以现在我得到关于视图"框架在运行时不同"的警告,特别是运行时的大小和位置与画布中的大小和位置.不确定为什么Xcode"关心"类的大小设置为任何高度和任何宽度的画布.我认为自适应布局的重点在于根据设备屏幕尺寸和方向在运行时解析尺寸和位置.

如果我崩溃并让Xcode"更新帧"......是的,警告消失了,但是对于超大视图,几乎不可能以所见即所得的方式在小画布上以图形方式工作.这里解决警告的任何解决方案都没有创建超大视图,这使得在画布内工作几乎不可能?

画布截图

xcode ios autolayout adaptive-layout

20
推荐指数
3
解决办法
2万
查看次数

iOS 8 presentationController确定是否真的是popover

我正在使用iOS 8的新自适应"Present As Popover"功能.我在StoryBoard中连接了一个简单的segue来进行演示.它适用于iPhone 6 Plus,因为它将视图显示为弹出窗口,而在iPhone 4s上则显示为全屏视图(工作表样式).

问题是当显示为全屏视图时,我需要在视图中添加"完成"按钮,以便可以调用dismissViewControllerAnimated.当它显示为弹出窗口时,我不想显示"完成"按钮.

在此输入图像描述

我试着查看presentationController和popoverPresentationController的属性,我什么也没发现,它告诉我它是否实际显示为弹出框.

NSLog( @"View loaded %lx", (long)self.presentationController.adaptivePresentationStyle );          // UIModalPresentationFullScreen
NSLog( @"View loaded %lx", (long)self.presentationController.presentationStyle );                  // UIModalPresentationPopover
NSLog( @"View loaded %lx", (long)self.popoverPresentationController.adaptivePresentationStyle );   // UIModalPresentationFullScreen
NSLog( @"View loaded %lx", (long)self.popoverPresentationController.presentationStyle );           // UIModalPresentationPopover
Run Code Online (Sandbox Code Playgroud)

adaptivePresentationStyle始终返回UIModalPresentationFullScreen,而presentationStyle始终返回UIModalPresentationPopover

在查看UITraitCollection时,我确实发现了一个名为"_UITraitNameInteractionModel"的特征,当它实际显示为Popover时,它只被设置为1.但是,Apple不通过popoverPresentationController的traitCollection直接访问该特征.

uipopovercontroller ios8 adaptive-layout

16
推荐指数
2
解决办法
5469
查看次数

Xcode 8中的自适应布局

我正在使用Xcode 8(beta 1)开发应用程序.不幸的是,我无法找到"大小类"选项.

在Xcode 7中,有选项"使用大小类".

在此输入图像描述

但在Xcode 8中没有这样的选择.在Xcode 8中使用Size Classes或类似功能有什么帮助吗?

xcode ios adaptive-layout ios10 xcode8

10
推荐指数
2
解决办法
1万
查看次数

iOS防止计时器UILabel在数字改变时"摇动"

我有一个UILabel显示定时器输出的格式MM:ss:SS(分钟,秒,厘秒),然而它从左到右"摇动",因为厘秒的宽度改变 - 例如,"11"比"33"窄.

有什么方法可以缓解这个问题吗?我试过把它居中,给它一个固定的宽度,但它们似乎没有帮助.

ios autolayout swift adaptive-layout

9
推荐指数
2
解决办法
1649
查看次数

iOS Autolayout自适应UI问题

我想根据宽度是否大于高度来改变我的布局.但我不断收到布局警告.我在自适应布局上观看了两个WWDC视频,这些视频帮了很多但没有解决问题.我使用以下代码创建了一个简单版本的布局.这只是让人们可以重现我的问题.代码在iPhone 7 plus上运行.

import UIKit

class ViewController: UIViewController {

    var view1: UIView!
    var view2: UIView!

    var constraints = [NSLayoutConstraint]()

    override func viewDidLoad() {
        super.viewDidLoad()

        view1 = UIView()
        view1.translatesAutoresizingMaskIntoConstraints = false
        view1.backgroundColor = UIColor.red

        view2 = UIView()
        view2.translatesAutoresizingMaskIntoConstraints = false
        view2.backgroundColor = UIColor.green

        view.addSubview(view1)
        view.addSubview(view2)

        layoutPortrait()
    }

    func layoutPortrait() {
        let views = [
            "a1": view1,
            "a2": view2
        ]

        constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[a1]|", options: [], metrics: nil, views: views)
        constraints += NSLayoutConstraint.constraints(withVisualFormat: "H:|[a2]|", options: [], metrics: nil, views: views)
        constraints += …
Run Code Online (Sandbox Code Playgroud)

ios autolayout swift adaptive-layout

9
推荐指数
1
解决办法
1531
查看次数

如何创建一个将在iPad上使用popover并推送到iPhone上的导航堆栈的segue?

在我的应用程序中,某些视图控制器在iPad上(或者更具体地说,是一个常规的水平尺寸类)将它们作为弹出窗口显示是有意义的,但是在iPhone(或紧凑的水平尺寸类)上推送它是有意义的他们到导航堆栈上.有一种优雅的方式来支持这个吗?默认情况下,如果我使用"Present as Popover"segue,它将在iPhone上以模态方式显示,这不是我想要的.

我找到了一种方法来获得我想要的行为,但它很难看,而且容易出错.我根据我目前所处的大小类选择两个不同的segue.为了支持iOS 9多任务,我实现[UIViewController willTransitionToTraitCollection:withTransitionCoordinator]并在弹出窗口和导航控制器之间手动移动视图控制器(这部分看起来特别容易出错).

似乎应该有一些简单的方法来实现自定义segue来处理这个,或者某种自定义自适应表示控制器,但我还是无法绕过它.有人做过这样的成功吗?

popover ipad ios size-classes adaptive-layout

8
推荐指数
1
解决办法
1141
查看次数

iOS 7自动布局与iOS 8自适应布局有什么区别?

iOS 7 Auto Layout和iOS 8 Adaptive Layout之间有区别吗?或者它只是 - 自适应布局 - 一个更强大的版本,具有更多功能,以帮助构建适合不同屏幕尺寸的更灵活的布局?

我真的无法弄清楚两个术语之间的真正区别,还是我错过了什么?

autolayout ios8 adaptive-layout

7
推荐指数
2
解决办法
6571
查看次数

iOS 8 - 使用标识符查找UIView的约束

我正在尝试在viewDidLoad中为iPhone 4S,5,5S更改ImageView的约束:

for (NSLayoutConstraint *constraint in logoImage.constraints) {
    if ([constraint.identifier isEqualToString:@"logoTopIdentifier"]) {
        constraint.constant=10;
    }
}
Run Code Online (Sandbox Code Playgroud)

似乎它甚至不在循环中迭代.有没有其他方法来获得标识符的特定约束?

constraints objective-c ios autolayout adaptive-layout

7
推荐指数
1
解决办法
2760
查看次数

静态单元格在iPhone上有背景颜色,但在iPad上却没有 - 找不到原因

在具有故事板和自适应布局(又称大小类)的iOS 8项目中,我在2个场景中使用静态单元格 -

由于某些原因,顶部单元格的蓝色背景颜色未在iPad上显示:

截图

请问,原因可能是什么?

我甚至用调试器(逐步通过viewDidLoad)和Main.storyboard的XML代码进行搜索 - 并且找不到原因.

我也重置了模拟器设置,并尝试了我拥有的Yosemite和Mavericks mac.

这是我的故事板(请点击全屏)我设置背景颜色(对于wAnyhAny):

Xcode中

在预览(此处为全屏)中,iPad和iPhone均显示背景颜色:

预习

如果我在这里做错了什么,如何找到并重置它?

更新:

我尝试过DCGoD的建议(谢谢) - 它确实有效.当我尝试使用以下代码设置单元格背景颜色时,它可以工作(这里是全屏):

截图

#define THEME_COLOR_BLUE [UIColor colorWithRed:19.0/255 green:175.0/255 blue:207.0/255 alpha:1.0]

- (void)tableView:(UITableView *)tableView
    willDisplayCell:(UITableViewCell *)cell
    forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.contentView.backgroundColor = THEME_COLOR_BLUE;
}
Run Code Online (Sandbox Code Playgroud)

我明白,我可以用它作为一种解决方法......

但我仍然好奇我的故事板出了什么问题.为什么它适用于iPhone,而不适用于iPad?我更喜欢使用纯粹的"视觉"解决方案(使故事板更容易编辑).

解:

由于一些奇怪的原因,修复是设置"内容视图"的背景颜色(而不是其父级 - "表视图单元格".这里全屏):

Xcode截图

xcode interface-builder ipad ios adaptive-layout

6
推荐指数
1
解决办法
684
查看次数

IOS/Swift - 如何使用自动布局调整每个设备屏幕尺寸的字体大小和边距大小

来自Android世界,我正试图在swift中创建我的第一个IOS应用程序.实际上坚持构建适用于从Iphone 5s到Ipad 12.9"所有屏幕尺寸的接口.Autolayout运行良好,除了我找不到如何轻松调整每种屏幕尺寸的字体大小和边距.也许我错过或错过了 - 在我的研究中理解了一些东西,但我的问题是:如何在大屏幕上获得较大的边距/字体大小,在较小的屏幕上有较小的边距/字体大小?是否有可能为每个设备或范围的边缘设置一个常数屏幕尺寸在一个地方,所以我可以轻松改变它?

更新:我忘了提到我也试过了约束和字体大小的变化,但只有"常规"和"紧凑"之间的几个选项,如果你需要改变一个余量,你必须在你的所有元素上改变它看起来很疯狂..

在Android中,每个屏幕大小/分辨率都有一个维度xml文件,您可以在其中包含内容并将它们分配给您想要的每个元素.我无法弄清楚IOS背后的逻辑

提前致谢

size fonts margin swift adaptive-layout

5
推荐指数
0
解决办法
540
查看次数