标签: nslayoutconstraint

由于自动布局和大量子视图,解散VC非常慢

我有一个滚动视图加载了很多子视图,由于我不会进入的原因,我选择cell不再使用和a UITableView.它运行良好,在填充视图时保存一点初始主线程滞后.但是,每次VC "on top"被解雇时(e.g. after presenting a modal overtop),都会有很长的延迟(2-3秒).我通过探查器运行它,堆栈跟踪深入研究了IOS/Autolayout,如附图中所示.

代码似乎进入了 NSLayoutConstraint("+0x06 calll "-[NSLayoutConstraint _addToEngine:]+0x0b").

有什么办法可以绕过这种明显的约束重新应用吗?

数据栈

objective-c uiviewcontroller ios autolayout nslayoutconstraint

3
推荐指数
1
解决办法
2483
查看次数

如何让约束自动调整大小并重新定位横向键盘键

我很难弄清楚如何通过约束来获得我想要的结果.我可以通过编程方式执行此操作,但似乎应该有更好的方法.

基本上我有一个键盘.

  1. 最左边的键(Q)和最右边的键(P)应该是从左侧和右侧的3个点.

  2. Q键和P键之间的8个键应在Q和P键之间等间隔

  3. 键应该在宽度上拉伸以填充Q和P键之间的整个空间宽度,同时仍然保持彼此之间的相等空间.

基本上键盘应该像Apple的原生键盘在横向旋转时那样做.

这可以通过约束来完成,还是我需要在没有约束的情况下以编程方式执行此操作?

objective-c ios autolayout nslayoutconstraint ios8

3
推荐指数
1
解决办法
544
查看次数

NSLayoutConstraint阻止NSWindow调整大小

我在我的主要NSWindow中为NSView添加了一些简单的约束,但它引起了问题.

通常我可以调整应用程序窗口的大小(就像任何Safari/Finder窗口等).我像这样在我的窗口添加一个简单的NSView:

[self.blackDimOverlay setFrame:NSMakeRect(0, 0, self.window.frame.size.width, self.window.frame.size.height)];
        [self.blackDimOverlay setAlphaValue:0.5f];
        [self.window.contentView addSubview:self.blackDimOverlay];
Run Code Online (Sandbox Code Playgroud)

这按预期工作.然后,我向此视图添加两个约束,以便在调整大小时保持窗口的完整大小.

NSDictionary *viewsDict = NSDictionaryOfVariableBindings(_blackDimOverlay);
        NSArray *constraintHorizontalOverlay = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[_blackDimOverlay]-0-|" options:0 metrics:nil views:viewsDict];
        NSArray *constraintVerticalOverlay = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[_blackDimOverlay]-0-|" options:0 metrics:nil views:viewsDict];
        [self.window.contentView addConstraints:constraintHorizontalOverlay];
        [self.window.contentView addConstraints:constraintVerticalOverlay];
Run Code Online (Sandbox Code Playgroud)

但是,添加这两个约束后,它们会锁定我的窗口,所以我不能再调整它了.其他所有工作都正常,但约束阻止任何窗口调整大小.

如何在调整窗口大小的同时将子视图保持为窗口的全尺寸?

谢谢.

macos cocoa objective-c nswindow nslayoutconstraint

3
推荐指数
1
解决办法
1399
查看次数

是否可以将UIView的顶部固定在导航栏的底部?

我试图将我的UIView定位在导航栏下方为20pt,但是当我将其相对于视图控制器上的视图进行设置时,它仍位于导航栏下方为20pt,并且我不想对其进行硬编码。

是否可以将其放置在导航栏之外?

cocoa-touch uiview ios autolayout nslayoutconstraint

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

字符串与NSObject错误不同,同时在Swift中应用约束(视觉约束)

import UIKit
import Foundation
class DetailView: UIViewController{
    var fullImage:UIImageView?
    var nameLabel:UILabel?
    var detailLabel:UILabel?

    override  func viewDidLoad() {
        super.viewDidLoad()
        fullImage = UIImageView()
        nameLabel = UILabel()
        detailLabel = UILabel()
        self.view.addSubview(fullImage!)
        self.view.addSubview(nameLabel!)
        self.view.addSubview(detailLabel!)
    }

    func applyContraints(){
        self.view.addSubview(fullImage!)

     fullImage?.setTranslatesAutoresizingMaskIntoConstraints(false)
     nameLabel?.setTranslatesAutoresizingMaskIntoConstraints(false)
     detailLabel?.setTranslatesAutoresizingMaskIntoConstraints(false)

        var viewsDict:[String:AnyObject!] = ["imageView": fullImage!, "nameLabel": nameLabel!, "detailLabel": detailLabel!]

        var constraints:NSArray

        constraints = NSLayoutConstraint.constraintsWithVisualFormat("H:|-10-[imageView]-10-|",
            options: 0,
            metrics: nil,
            views: viewsDict)
        self.view.addConstraints(constraints)



    }
}
Run Code Online (Sandbox Code Playgroud)

nsdictionary ios nslayoutconstraint swift

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

强制视图上的特定大小类

我有一个视图,需要iPad和iPhone版本之间的不同约束.

登录屏幕在iPhone上以及在iPad上的页面表中以全屏显示.由于尺寸的原因,UITextFields距离iPhone的右侧和左侧40像素,但我希望它们在iPad上为80像素.我将其设置为最终值大小类(w Regular,h Regular)的特定约束.

但是,因为此视图显示在页面表上,所以它不使用最终值大小类.理想情况下,我想"强制"视图使用大小类,而不是拥有一组iPhone/iPad约束和许多约束Outlets.

objective-c ios autolayout nslayoutconstraint size-classes

3
推荐指数
1
解决办法
2853
查看次数

如何在StackView中设置相等宽度或相等高度?

我这里有六个标签,每两个标签在水平视图中堆叠,所有水平视图在垂直视图中堆叠,如下所示

标签布局细节

标签布局细节视觉

这就是我想要的:无论每个标签的内容如何,我都希望将Label1宽度设置为30%Label2

外部堆栈视图设置为Aligment:Fill,Distribution:Fill Equally

所有内部堆栈视图都设置为Aligment:Fill,Distribution:Fill

我把Label1拥抱设置为250,Label2默认为(其他人也是如此).

我试图在图2中设置宽度等于宽度.但它未被选中

我该怎么办呢?喜欢在故事板中完成所有工作,但在代码中工作也是可以的.


解决方案:只需选择两个标签来添加约束,如下面的 解决方案图像

ios autolayout nslayoutconstraint swift

3
推荐指数
1
解决办法
5486
查看次数

带锚点的自动布局边距

因此,我认为以下内容是等效的?

# This is how I usually do
contentView.leftAnchor.constraint(equalTo: leftAnchor, constant: 5).isActive = true
contentView.topAnchor.constraint(equalTo: topAnchor, constant: 5).isActive = true
contentView.rightAnchor.constraint(equalTo: rightAnchor, constant: -5).isActive = true
contentView.bottomAnchor.constraint(equalTo: bottomAnchor, constant: -5).isActive = true

# This is what I tried. I expected the same result..
layoutMargins = UIEdgeInsets(top: 5, left: 5, bottom: 5, right: 5)
contentView.leftAnchor.constraint(equalTo: layoutMarginsGuide.leftAnchor).isActive = true
contentView.topAnchor.constraint(equalTo: layoutMarginsGuide.topAnchor).isActive = true
contentView.rightAnchor.constraint(equalTo: layoutMarginsGuide.rightAnchor).isActive = true
contentView.bottomAnchor.constraint(equalTo: layoutMarginsGuide.bottomAnchor).isActive = true
Run Code Online (Sandbox Code Playgroud)

虽然我似乎是错的。我如何使用边距,约束和锚点在containerView和父级之间获得5个边距?

cocoa-touch ios autolayout nslayoutconstraint

3
推荐指数
1
解决办法
4489
查看次数

以编程方式为UIView的子视图设置自动布局约束

下面我列出了一些代码供您结账.我正在尝试自定义UIView并添加另一个自定义子视图.这个子视图应该以这样的方式约束到父视图,它基本上只是在相同的维度上放置,而父级只是作为包装器.

NSLayoutConstraint到目前为止,我已尝试使用和失败的悲惨.视图从未真正显示出来.我有一个left,right,bottom和top约束,它应与父视图对齐.

第一个问题是,有人请在使用以下方法时解释或纠正我的逻辑.我想到的项目参数是你想为(customViewChild)设置约束的实际视图.该属性是说我希望my的左边缘customViewChild用于此约束.在relatedBy看起来很简单的,虽然我可能是错的,最后的toItem指向自我这是我CustomViewParent这也有一个.left属性地说,我希望我的孩子和家长的左边缘对齐.这个逻辑有缺陷还是我做错了什么?

NSLayoutConstraint(item: customViewChild!, 
            attribute: .left, 
            relatedBy: .equal,
            toItem: self,
            attribute: .left, 
            multiplier: 1.0, 
            constant: 0.0)
Run Code Online (Sandbox Code Playgroud)

我知道下面的例子很容易用IB完成,但我想了解NSLayoutConstraint,所以请提供相关答案.最后,如果有人能够真正纠正这个代码,那么我有一个有效的例子,那将是非常棒的.

class CustomViewParent: UIView {

    var customViewChild: UIView?

    override init(frame: CGRect) {
        super.init(frame: frame)

        setConstraints()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        setConstraints()
    }

    func setConstraints() {
        customViewChild = UIView()

        addSubview(customViewChild!)
        customViewChild?.translatesAutoresizingMaskIntoConstraints = false

        let leftConstraint = NSLayoutConstraint(item: customViewChild!, 
            attribute: .left, 
            relatedBy: .equal,
            toItem: self, …
Run Code Online (Sandbox Code Playgroud)

ios nslayoutconstraint swift ios-autolayout

3
推荐指数
1
解决办法
3001
查看次数

NSLayoutConstraint`view不是views字典中的键`

介绍:

是的,我已经浏览了与该主题相关的所有问题,所有答案都无济于事。下面的代码不断使我抛出NSInvalidArgumentException异常,但我仍然看不到它出了什么问题。

题:

我已经尝试了所有可能尝试的方法。它仍然崩溃,并始终显示相同的错误消息。'Unable to parse constraint format: sceneView is not a key in the views dictionary.'

这是我的工作:

- (SCNView *)sceneView { // Lazy Load
  if (_sceneView == nil) {
    _sceneView = [[SCNView alloc] initWithFrame:self.bounds];
    _sceneView.backgroundColor = [UIColor blackColor];
    _sceneView.scene = self.scene; // Load scene
    _sceneView.translatesAutoresizingMaskIntoConstraints = NO;

  }
  return _sceneView;
}
Run Code Online (Sandbox Code Playgroud)

然后在中-(void)commonInit,将其添加:

if ([self.sceneView isDescendantOfView:self] == NO) {
    [self addSubview:self.sceneView];
  }

  [self.sceneView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[sceneView]|"
                                                                         options:0
                                                                         metrics:nil
                                                                           views:NSDictionaryOfVariableBindings(self.sceneView)]];
Run Code Online (Sandbox Code Playgroud)

此后,它异常终止。为什么?

objective-c ios nslayoutconstraint

3
推荐指数
1
解决办法
681
查看次数