标签: ios-autolayout

平滑调整自动布局的内容压缩阻力优先级/大小约束的动画

我有一个? constant高度约束和固定宽度约束的视图.在它内部,我有一个文本视图,其中包含该外部视图的前导/尾随/顶部/底部约束,实际上在该视图内"停靠"(只有几个点边距).我将文本视图的垂直内容压缩阻力优先级设置为750,并根据文本内容调整自身大小.当我进入第二行时它会增长,当我删除一行时会缩小等等.但是,我希望将增长/缩小设置为动画.我已将此代码添加到我的文本视图和外部视图的setFrame:代码中(它们都是自定义子类):

-(void)setFrame:(CGRect)frame{
    [super setFrame:frame];
    [UIView animateWithDuration:0.2 animations:^{
        [self layoutIfNeeded];
    } completion:nil];
}
Run Code Online (Sandbox Code Playgroud)

它不起作用,它仍然没有动画.然后,我是子类NSLayoutConstraint,并setConstant:使用相同的代码覆盖其方法:

-(void)setConstant:(CGFloat)constant{
    [super setConstant:constant];
    if(self.shouldAnimate){
        [UIView animateWithDuration:0.2 animations:^{
            [self.firstItem layoutIfNeeded];
        } completion:nil];
    }
}
Run Code Online (Sandbox Code Playgroud)

它也不起作用.我在这些方法中放了一个断点,它们根本就没有被调用.显然,布局变化发生在较低的水平.我怎样才能使我的观点成长和缩小?一个选项是禁用内容压缩阻力优先级,计算文本更改时文本视图的高度,然后手动设置高度属性,并在那里设置动画.但是如果有一个更清晰的解决方案涉及使用内容压缩阻力进行动态/自动调整大小,我不想这样做.有解决方案吗?

objective-c ios autolayout ios-autolayout

7
推荐指数
0
解决办法
356
查看次数

在iOS中启动多个设备和不同方向的屏幕故事板

我的应用程序支持从两个方向的4英寸以上的所有设备.

iPhone - 5,5S,5C,6,6S,6 +,6S +,SE

iPad 4,iPad Air,iPad Air2,iPad Pro等

使用资产目录启动屏幕它的工作正常,但在iPad Pro应用程序显示标准键盘,而iPad Pro优化键盘更大,并没有给用户最好的感觉.

如下所示链接应用程序应该使用启动故事板而不是资产图像来获得优化的iPad Pro原生键盘.

https://forums.developer.apple.com/thread/26357

现在的问题是如何在发布屏幕故事板中支持两种方向?

如何在故事板中为纵向和横向模式添加不同的启动图像?在两个方向上使用iPad的尺寸等级,包括常规和常规尺寸.

注 - 由于它启动了屏幕故事板,因此无法使用自定义类自定义大小类.

ipad ios xcode-storyboard ios-autolayout launch-screen

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

自动调整不适用于iOS11/XCode 9

Autoresizing在使用XCode 9构建iOS11时,看起来视图不再可靠.

几个视图的布局最终会在XIB中定位控件,但是没有进行适当的调整.这在iOS10中运行良好,适用于在iOS11中运行的旧应用程序.但是,重建应用程序的定位和大小调整失败.

有什么改变会影响使用autoresizingmask吗?

有没有办法自动转换AutoResizingAutoLayout and Constraints

编辑: 给出麻烦的控件是UINavigationBarUIToolBar.

autoresizingmask autolayout ios-autolayout ios11 xcode9

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

在iOS11上,如何让UIToolbar调整所有项目的大小?

在iOS 10之前,UIToolbar在其项目之间具有灵活的空格键按钮项目将自动减少字体,以便所有文本显示在屏幕上.以下示例(iOS 10):

iOS 10示例

从XCode 9开始,在模拟器上运行iOS 11时,我的工具栏显示如下:

iOS 11示例

文本不仅缩小了字体大小,而且最后一个条形按钮项(没有文本,只有图像)也消失了.

试图解决这个问题,我发现自iOS 11以来,UIToolbar现在使用的是Autolayout而不是Frames.与此问题相关的一些帖子建议为项目创建约束,指定项目的宽度和/或高度.

但是,我想要实现的是适合工具栏中的所有内容,即使这意味着减小字体大小.我认为我不能以编程方式设置固定的宽度/高度.

此外,这是在故事板上使用IB构建的.UIBarButtonclass不允许我访问UILabel(对于文本项)或ImageView(对于带有图像的项).我检查,customViewnil在运行时.

我试图通过代码创建项目,设置customView一个UILabeladjustsFontSizeToFitWidth设置为true没有任何的运气.我不知道iOS 11上灵活空格键项的目的是什么.

那么,如何模仿我以前的行为呢?适合所有项目并自动调整文本大小?

uitoolbar ios autolayout ios-autolayout

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

在所有设备AutoLayout上水平拉伸两个按钮

我试图在所有设备上并排放置两个按钮,但不管我似乎添加了什么限制,我都会遇到类似这样的问题(一个按钮大于另一个按钮):

在此输入图像描述

关于添加约束,我有什么想法吗?我只是通过Storyboard中的InterfaceBuilder来使用代码.

约束集:

回复:前导空格,底部空间,高度等于:45,尾随删除按钮

删除:尾随空格,底部空间,32:9比率,高度等于:45,导致回复Btn

constraints objective-c ios autolayout ios-autolayout

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

在UITableViewCell中使用包含带异步图像加载的UICollectionView的自动布局

TL; DR:第一次显示包含集合视图的单元格时autolayout引擎计算的高度总是错误的.调用reloadData()表视图可以解决问题,但也会使表视图跳转并无法使用.任何的想法?

解释:我有一个表视图,其中包含许多不同高度的不同单元格.

其中一个单元格是一个图像库,可以包含一个或多个异步加载的图像.

我有的限制如下:

  • 如果图库仅包含一个图像,并且此图像以横向方向定向,则图库的高度应为图像的高度
  • 否则,画廊有一个固定的高度.

我面临的问题如下:

  • 当表视图第一次尝试显示图库单元格时,我收到了Super Annoying Encapsulated-Height-Layout问题.即使已更新集合视图上的高度约束,此封装高度始终具有错误值.

  • 表格视图在第一次尝试时始终无法正确获取单元格的大小.

    • 即使在显示单元格时已经检索到图像,单元格也显示不佳,我必须向上/向下滚动以隐藏它,然后再次显示它以获得正确的大小...直到下一次单元格大小必须是再次计算.见下文: 在此输入图像描述
  • 我可以强制表视图正确显示单元格的唯一方法是在第一次加载图像时在表视图上调用reloadData ...这使得表视图跳转并基本上无法使用.

我正在使用Kingfisher来检索图像,这里是代码:

UICollectionViewCell数据源:

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("CarouselCollectionViewCell", forIndexPath: indexPath) as! CarouselCollectionViewCell
    guard let collectionView = collectionView as? CarouselCollectionView else { return cell }

    if let imagesURLs = data.imagesURLs {
        let url = imagesURLs[indexPath.item]

        if let smallURL = url.small {
            KingfisherManager.sharedManager.retrieveImageWithURL(
                smallURL,
                optionsInfo: KingfisherOptionsInfo(),
                progressBlock: nil,
                completionHandler: { (image, error, cacheType, imageURL) -> () …
Run Code Online (Sandbox Code Playgroud)

uitableview ios uicollectionview swift ios-autolayout

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

需要 y 位置、高度的约束 - 自动布局情节提要

首先我要告诉大家的是,我在 Stack Overflow 上遇到了多个相同类型的问题,但它们都没有帮助我。

所以我创建了新问题来讨论我的问题。

我是 iOS 编程和 Storyboard 布局制作的初学者,所以每天在设计中遇到的问题很少。对于这个问题,我已经花了两天的时间,但对于专家来说,帮助我解决这个问题可能真的很容易。

我在布局中收到红色警告,因为 y 位置、高度以及我想要解决此问题的任何方式都需要限制。下图将使您更清楚地了解这一点:

在此输入图像描述

具体来说,我在视频视图和下面的按钮中遇到了有关 y 位置限制的问题。

在此输入图像描述

所以请建议我,如何解决这个问题?当我进行布局时,我多次遇到同样的问题,所以如果我学习这个解决方案,那么这对我来说将是很大的缓解。

xcode ios uistoryboard ios-autolayout

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

在 UIScrollView 中使用 snapkit/autolayout

我有一个应用程序

  • 滚动视图
    • 内容视图
      • 图表
      • 纽扣
      • 其他的东西

我尝试如下所示对其进行约束,但我缺少一个约束,而且我找不到我需要的东西。

    self.view.addSubview(self.scrollView)
    self.scrollView.snp.makeConstraints { (make) in
        make.edges.equalTo(self.view)
    }
    let contentView = UIView()

    self.scrollView.addSubview(contentView)
    contentView.snp.makeConstraints { (make) in
        make.top.bottom.equalTo(self.scrollView)
        make.left.right.equalTo(self.view)
    }
    contentView.addSubview(self.chart)
    self.chart.snp.makeConstraints { (make) in
        // http://snapkit.io/docs/
        make.edges.equalTo(contentView).inset(UIEdgeInsets(top: 30, left: 0, bottom: 50, right: 0))
    }
Run Code Online (Sandbox Code Playgroud)

在哪里 scrollView = UIScrollView()

autolayout swift ios-autolayout snapkit swift4

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

无法激活,因为它们没有共同的祖先 IBOutlet 和代码

我正在尝试向我创建并添加以编程方式查看的表视图添加约束。我想根据 a 来约束它,UITextField这是一个IBOutlet. 但是,我收到以下错误:

*** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“无法激活带有锚点的约束,因为它们没有共同的祖先。约束或其锚点是否引用不同视图层次结构中的项目?这是非法的。

@IBOutlet weak var authorTextField: UITextField!

override func viewDidLoad() {
    myTableView = MyTableView(frame: CGRect(x: 0, y: 80, width: 320, height: 120), style: .plain)
    myTableView!.isHidden = false
    myTableView!.backgroundColor = UIColor.green
    self.view.addSubview(myTableView!)
    myTableView.setConstraints(to: authorTextField)  // <-- this fails

Run Code Online (Sandbox Code Playgroud)
// MyTableView.swift ..
func setConstraints(to view: UIView)
    self.translatesAutoresizingMaskIntoConstraints = false
    self.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 8.0).isActive = true
    self.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -8.0).isActive = true
}
Run Code Online (Sandbox Code Playgroud)

如何添加这个约束呢?

ios swift ios-autolayout

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

XCode11 如何禁用自动布局?

在以前版本的 XCode 中,我可以打开故事板并单击几乎任何地方,在文件检查器中,有一个按钮可以禁用自动布局。这似乎不再是一种选择?我现在被迫使用自动布局吗?

没有自动布局选项的故事板文件检查器的屏幕截图

xcode autolayout ios-autolayout

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