我有一个滚动视图加载了很多子视图,由于我不会进入的原因,我选择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
我很难弄清楚如何通过约束来获得我想要的结果.我可以通过编程方式执行此操作,但似乎应该有更好的方法.
基本上我有一个键盘.
最左边的键(Q)和最右边的键(P)应该是从左侧和右侧的3个点.
Q键和P键之间的8个键应在Q和P键之间等间隔
键应该在宽度上拉伸以填充Q和P键之间的整个空间宽度,同时仍然保持彼此之间的相等空间.
基本上键盘应该像Apple的原生键盘在横向旋转时那样做.
这可以通过约束来完成,还是我需要在没有约束的情况下以编程方式执行此操作?
我在我的主要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)
但是,添加这两个约束后,它们会锁定我的窗口,所以我不能再调整它了.其他所有工作都正常,但约束阻止任何窗口调整大小.
如何在调整窗口大小的同时将子视图保持为窗口的全尺寸?
谢谢.
我试图将我的UIView定位在导航栏下方为20pt,但是当我将其相对于视图控制器上的视图进行设置时,它仍位于导航栏下方为20pt,并且我不想对其进行硬编码。
是否可以将其放置在导航栏之外?
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) 我有一个视图,需要iPad和iPhone版本之间的不同约束.
登录屏幕在iPhone上以及在iPad上的页面表中以全屏显示.由于尺寸的原因,UITextFields距离iPhone的右侧和左侧40像素,但我希望它们在iPad上为80像素.我将其设置为最终值大小类(w Regular,h Regular)的特定约束.
但是,因为此视图显示在页面表上,所以它不使用最终值大小类.理想情况下,我想"强制"视图使用大小类,而不是拥有一组iPhone/iPad约束和许多约束Outlets.
我这里有六个标签,每两个标签在水平视图中堆叠,所有水平视图在垂直视图中堆叠,如下所示


这就是我想要的:无论每个标签的内容如何,我都希望将Label1宽度设置为30%Label2
外部堆栈视图设置为Aligment:Fill,Distribution:Fill Equally
所有内部堆栈视图都设置为Aligment:Fill,Distribution:Fill
我把Label1拥抱设置为250,Label2默认为(其他人也是如此).
我试图在图2中设置宽度等于宽度.但它未被选中
我该怎么办呢?喜欢在故事板中完成所有工作,但在代码中工作也是可以的.
解决方案:只需选择两个标签来添加约束,如下面的 解决方案图像
因此,我认为以下内容是等效的?
# 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个边距?
下面我列出了一些代码供您结账.我正在尝试自定义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) 介绍:
是的,我已经浏览了与该主题相关的所有问题,所有答案都无济于事。下面的代码不断使我抛出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)
此后,它异常终止。为什么?
ios ×9
autolayout ×6
objective-c ×5
swift ×3
cocoa-touch ×2
cocoa ×1
ios8 ×1
macos ×1
nsdictionary ×1
nswindow ×1
size-classes ×1
uiview ×1