标签: ios-autolayout

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

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

在此输入图像描述

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

约束集:

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

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

constraints objective-c ios autolayout ios-autolayout

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

自定义UITableViewCell具有自动布局和附件视图

我有一个自定义表格视图单元格,它使用自动布局,并有一个披露指标作为附件视图.首次显示时,屏幕上单元格的单元格大小完全错误:

正如您所看到的那样,该单元占用了大约1.5个屏幕的空间:

在此输入图像描述

但是,如果我旋转设备并向后旋转它看起来很好:

在此输入图像描述

正如你在这里看到的,我没有做过任何复杂的事情:

在此输入图像描述

我有一个非常非理想的解决方法:

-(void)viewDidAppear:(BOOL)animated 
{
    [super viewDidAppear:animated];
    [self.tableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)

但是当你第一次看到屏幕时,这显然会导致"闪光".在更复杂的情况下,闪光灯更加明显.

我有另一个解决方法,但这会导致自动布局异常:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{
    BasicCell *cell = [tableView dequeueReusableCellWithIdentifier:@"BasicCell" forIndexPath:indexPath];
    cell.basicLabel.text = @"Hello this is just some text that should get the label to go over multiple lines";
    [cell.basicLabel layoutIfNeeded];
    return cell;
}
Run Code Online (Sandbox Code Playgroud)

例外:

在此输入图像描述

至少这种方法不会给我UI闪烁.

如果我删除附件视图,它实际上完全正常.

更新:我已经向github添加了一个示例项目:https: //github.com/fwaddle/TableCellAccessoryTest

更新#2:关于这个错误的另一项工作是在代码中布局单元格.我只是尝试在代码中做同样的事情,它没有抛出警告并且工作正常.看起来像一个IB bug.

有任何想法如何解决这个问题?谢谢.

objective-c uitableview ios ios-autolayout uitableviewautomaticdimension

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

在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
查看次数

如何以编程方式添加与Autolayout的InputAccessoryView?

我正在尝试添加一个UIView带有"完成"按钮作为文本字段的输入附件视图.

        let view = UIView()
        let doneButton = UIButton(type: .Custom)
        doneButton.setTitle("Done", forState: .Normal)
        doneButton.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(doneButton)
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:[button]-|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["button":doneButton]))
        view.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[button]|", options: NSLayoutFormatOptions.DirectionLeadingToTrailing, metrics: nil, views: ["button":doneButton]))
        view.addConstraint(NSLayoutConstraint(item: view, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: doneButton, attribute: NSLayoutAttribute.Height, multiplier: 1, constant: 0)) // Even this does not work
        self.emailTextField.inputAccessoryView = view
Run Code Online (Sandbox Code Playgroud)

但是,我无法在Xcode中看到视图高度设置和视图层次结构调试器/检查器中的按钮.

但是,如果我通过设置其框架添加视图,我可以看到添加的视图.我也尝试将高度约束强制设置为常数21,它打破了一些我没有添加的其他约束_UIKBAutolayoutHeightConstraint

"<NSLayoutConstraint:0x7fa3c962be50 UIView:0x7fa3c963bf60.height == UIButton:0x7fa3c963c0d0.height + 21>",
    "<NSLayoutConstraint:0x7fa3c95e0a90 '_UIKBAutolayoutHeightConstraint' V:[UIView:0x7fa3c963bf60(0)]>"
Run Code Online (Sandbox Code Playgroud)

以前有人遇到过这个问题吗?

ios inputaccessoryview swift ios-autolayout

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

InterfaceBuilder添加了不可删除的约束

我正在使用Xcode 8构建iOS 9和使用自动布局。

有时,当我在Interface Builder中安装约束时,会立即发生冲突。当我单击红色显示并查看冲突的约束时,我会看到我刚刚安装的约束和另一个冲突的约束。当我单击约束时,我将其突出显示。当我单击冲突约束时,它不会突出显示。当我单击红点以删除约束时,冲突约束旁边的复选框将显示为灰色,无法选中。当我返回到文档检查器或大小检查器时,没有看到针对其适用的对象列出的冲突约束。

因此在我看来,Interface Builder会添加无法删除的约束。我的问题是这些无法删除的约束没有帮助。例如,我在堆栈视图内部的视图中添加了宽度> = 50约束,并发现它与无法删除的系统添加的宽度= 0约束冲突。

有谁知道为什么会这样或我如何解决它?谢谢。

interface-builder ios ios-autolayout uistackview xcode8

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

令人难以置信的是,故事板视图顺序不适用于容器视图视图,修复?

一瞥这里...... /sf/answers/2431561611/

在此输入图像描述

在iOS中,您在故事板中的Inspector中放置兄弟视图的顺序当然会成为他们的z顺序.

我很惊讶地发现这似乎不适用于容器视图的任何此类视图.

要测试,只需制作一个具有几个兄弟视图的场景; 其中几个是容器视图.跑.在容器视图控制器的类中更改无辜的东西(例如,添加ViewDidLoad,约束或print语句),然后重试.容器视图视图随机移动到顶部.

我发现唯一的解决方法是:在viewWillAppear中手动将它们按顺序放置,这是坚果.

1)可能是我刚搞砸了什么 - 也许有一个设置("尊重故事板顺序 - 即使是容器视图!")

2)我一直在试图弄清楚如何"自动化"变通方法修复.您需要在故事板中加载时阅读所有视图的顺序吗?然后在viewWillAppear时间"修复"它.棘手.

3)可能有一些技巧..在prepareForSegue说?..强迫他们处于正确的Z顺序,就像任何观点一样!??


修复......

我刚刚想到了一个荒谬的解决办法.

假设您有一段包含10个兄弟视图的故事板,并说其中4个是容器视图.(所以,它实际上不起作用 - 如此处所述.)

事实上,即使是那四个视图也只是(毫无意义的)普通UIView,它们是容器视图的持有者.吸!

ios uistoryboard uicontainerview swift ios-autolayout

5
推荐指数
1
解决办法
243
查看次数

使用 UITableViewAutomaticDimension 时如何更改 UitableviewCell 中 UIView 的高度约束

在此输入图像描述

我在 UITableViewCell 中有一个 UIView ,当用户点击“更少/更多”按钮时需要更改其高度

我的代码是

 - (CGFloat)tableView:(UITableView *)tableView       estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}
Run Code Online (Sandbox Code Playgroud)

objective-c uitableview ios ios-autolayout uitableviewautomaticdimension

5
推荐指数
1
解决办法
1464
查看次数

使用stackview是否需要使用autolayout

是否有必要强制使用自动布局来仅使用 stackview 假设我已经制作了没有自动布局的整个项目,现在对于特定屏幕我必须使用 Stackview 来平均划分视图内的标签数量。有什么解决办法吗..

问题

实际上我必须自定义一个没有自动布局的旧项目,现在我必须只修改一个屏幕,它不需要任何约束,而只是像 uitablecell 一样的 stackview,每个单元格中有 8 个标签等分。

我知道我们可以通过计算帧运行时间来做到这一点,但是还有其他方法可以做到吗?

autoresize ios stackview swift ios-autolayout

5
推荐指数
1
解决办法
2377
查看次数

更改窗口 rootViewController 后安全区域插入错误

我正在inputAccessoryView使用UIViewController. 一切正常,直到我改变UIWindows rootViewController。之后,safeAreaInsets肖像被报告为风景,反之亦然。

rootViewController仅当从具有键盘输入的位置进行更改时才会发生这种情况。

以下是重现该问题的示例项目:https ://github.com/jcavar/ChangeRootSafeArea

我想这是某种魔法UITextEffectsWindow造成的。我尝试在更改之前完全删除它rootViewController,但随后输入附件视图不再出现。

对此有什么想法吗?

ios autolayout ios-autolayout safearealayoutguide

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

动态创建UI元素时如何设置scrollview高度

在故事板上,在视图控制器内我有一个滚动视图。导航栏和堆栈视图嵌入在滚动视图内。我以编程方式在堆栈视图中添加了一些 UI 元素。

通过故事板,滚动视图的约束设置为与安全区域相同 - 顶部、底部、前导、尾随和宽度。

导航栏约束 - 尾随、前导、顶部、宽度与超级视图相同。

Stackview 约束 - 尾随、前导、底部、宽度与 superview 相同。

导航栏的底部与 stackview 的顶部相同,因此它们是一个在另一个之下。

设置这些约束后,滚动视图出现错误 - 需要约束:Y 位置或高度

由于 UI 元素是动态添加到 stackview 中的,因此如何设置 Storyboard 中的高度?有一个更好的方法吗?

我尝试了“添加缺少的约束”选项,它为堆栈视图添加了恒定的高度,但这并不适用于所有设备。由于我是 iOS 应用程序开发的新手,因此非常感谢任何帮助。谢谢。

uiscrollview ios swift ios-autolayout uistackview

5
推荐指数
1
解决办法
3805
查看次数