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

关于添加约束,我有什么想法吗?我只是通过Storyboard中的InterfaceBuilder来使用代码.
约束集:
回复:前导空格,底部空间,高度等于:45,尾随删除按钮
删除:尾随空格,底部空间,32:9比率,高度等于:45,导致回复Btn
我有一个自定义表格视图单元格,它使用自动布局,并有一个披露指标作为附件视图.首次显示时,屏幕上单元格的单元格大小完全错误:
正如您所看到的那样,该单元占用了大约1.5个屏幕的空间:

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

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

我有一个非常非理想的解决方法:
-(void)viewDidAppear:(BOOL)animated 
{
    [super viewDidAppear:animated];
    [self.tableView reloadData];
}
但是当你第一次看到屏幕时,这显然会导致"闪光".在更复杂的情况下,闪光灯更加明显.
我有另一个解决方法,但这会导致自动布局异常:
- (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;
}
例外:

至少这种方法不会给我UI闪烁.
如果我删除附件视图,它实际上完全正常.
更新:我已经向github添加了一个示例项目:https: //github.com/fwaddle/TableCellAccessoryTest
更新#2:关于这个错误的另一项工作是在代码中布局单元格.我只是尝试在代码中做同样的事情,它没有抛出警告并且工作正常.看起来像一个IB bug.
有任何想法如何解决这个问题?谢谢.
objective-c uitableview ios ios-autolayout uitableviewautomaticdimension
TL; DR:第一次显示包含集合视图的单元格时autolayout引擎计算的高度总是错误的.调用reloadData()表视图可以解决问题,但也会使表视图跳转并无法使用.任何的想法?
解释:我有一个表视图,其中包含许多不同高度的不同单元格.
其中一个单元格是一个图像库,可以包含一个或多个异步加载的图像.
我有的限制如下:
我面临的问题如下:
当表视图第一次尝试显示图库单元格时,我收到了Super Annoying Encapsulated-Height-Layout问题.即使已更新集合视图上的高度约束,此封装高度始终具有错误值.
表格视图在第一次尝试时始终无法正确获取单元格的大小.
我正在使用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) -> () …我正在尝试添加一个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
但是,我无法在Xcode中看到视图高度设置和视图层次结构调试器/检查器中的按钮.
但是,如果我通过设置其框架添加视图,我可以看到添加的视图.我也尝试将高度约束强制设置为常数21,它打破了一些我没有添加的其他约束_UIKBAutolayoutHeightConstraint
"<NSLayoutConstraint:0x7fa3c962be50 UIView:0x7fa3c963bf60.height == UIButton:0x7fa3c963c0d0.height + 21>",
    "<NSLayoutConstraint:0x7fa3c95e0a90 '_UIKBAutolayoutHeightConstraint' V:[UIView:0x7fa3c963bf60(0)]>"
以前有人遇到过这个问题吗?
我正在使用Xcode 8构建iOS 9和使用自动布局。
有时,当我在Interface Builder中安装约束时,会立即发生冲突。当我单击红色显示并查看冲突的约束时,我会看到我刚刚安装的约束和另一个冲突的约束。当我单击约束时,我将其突出显示。当我单击冲突约束时,它不会突出显示。当我单击红点以删除约束时,冲突约束旁边的复选框将显示为灰色,无法选中。当我返回到文档检查器或大小检查器时,没有看到针对其适用的对象列出的冲突约束。
因此在我看来,Interface Builder会添加无法删除的约束。我的问题是这些无法删除的约束没有帮助。例如,我在堆栈视图内部的视图中添加了宽度> = 50约束,并发现它与无法删除的系统添加的宽度= 0约束冲突。
有谁知道为什么会这样或我如何解决它?谢谢。
一瞥这里...... /sf/answers/2431561611/
在iOS中,您在故事板中的Inspector中放置兄弟视图的顺序当然会成为他们的z顺序.
我很惊讶地发现这似乎不适用于容器视图的任何此类视图.
要测试,只需制作一个具有几个兄弟视图的场景; 其中几个是容器视图.跑.在容器视图控制器的类中更改无辜的东西(例如,添加ViewDidLoad,约束或print语句),然后重试.容器视图视图随机移动到顶部.
我发现唯一的解决方法是:在viewWillAppear中手动将它们按顺序放置,这是坚果.
1)可能是我刚搞砸了什么 - 也许有一个设置("尊重故事板顺序 - 即使是容器视图!")
2)我一直在试图弄清楚如何"自动化"变通方法修复.您需要在故事板中加载时阅读所有视图的顺序吗?然后在viewWillAppear时间"修复"它.棘手.
3)可能有一些技巧..在prepareForSegue说?..强迫他们处于正确的Z顺序,就像任何观点一样!??
我刚刚想到了一个荒谬的解决办法.
假设您有一段包含10个兄弟视图的故事板,并说其中4个是容器视图.(所以,它实际上不起作用 - 如此处所述.)
事实上,即使是那四个视图也只是(毫无意义的)普通UIView,它们是容器视图的持有者.吸!
 
   
我在 UITableViewCell 中有一个 UIView ,当用户点击“更少/更多”按钮时需要更改其高度
我的代码是
 - (CGFloat)tableView:(UITableView *)tableView       estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return UITableViewAutomaticDimension;
}
objective-c uitableview ios ios-autolayout uitableviewautomaticdimension
是否有必要强制使用自动布局来仅使用 stackview 假设我已经制作了没有自动布局的整个项目,现在对于特定屏幕我必须使用 Stackview 来平均划分视图内的标签数量。有什么解决办法吗..
问题
实际上我必须自定义一个没有自动布局的旧项目,现在我必须只修改一个屏幕,它不需要任何约束,而只是像 uitablecell 一样的 stackview,每个单元格中有 8 个标签等分。
我知道我们可以通过计算帧运行时间来做到这一点,但是还有其他方法可以做到吗?
我正在inputAccessoryView使用UIViewController. 一切正常,直到我改变UIWindows rootViewController。之后,safeAreaInsets肖像被报告为风景,反之亦然。
rootViewController仅当从具有键盘输入的位置进行更改时才会发生这种情况。
以下是重现该问题的示例项目:https ://github.com/jcavar/ChangeRootSafeArea
我想这是某种魔法UITextEffectsWindow造成的。我尝试在更改之前完全删除它rootViewController,但随后输入附件视图不再出现。
对此有什么想法吗?
在故事板上,在视图控制器内我有一个滚动视图。导航栏和堆栈视图嵌入在滚动视图内。我以编程方式在堆栈视图中添加了一些 UI 元素。
通过故事板,滚动视图的约束设置为与安全区域相同 - 顶部、底部、前导、尾随和宽度。
导航栏约束 - 尾随、前导、顶部、宽度与超级视图相同。
Stackview 约束 - 尾随、前导、底部、宽度与 superview 相同。
导航栏的底部与 stackview 的顶部相同,因此它们是一个在另一个之下。
设置这些约束后,滚动视图出现错误 - 需要约束:Y 位置或高度
由于 UI 元素是动态添加到 stackview 中的,因此如何设置 Storyboard 中的高度?有一个更好的方法吗?
我尝试了“添加缺少的约束”选项,它为堆栈视图添加了恒定的高度,但这并不适用于所有设备。由于我是 iOS 应用程序开发的新手,因此非常感谢任何帮助。谢谢。
ios ×10
ios-autolayout ×10
swift ×5
objective-c ×3
uitableview ×3
autolayout ×2
uistackview ×2
uitableviewautomaticdimension ×2
autoresize ×1
constraints ×1
stackview ×1
uiscrollview ×1
uistoryboard ×1
xcode8 ×1