ter*_*ory 102 xcode interface-builder xcode4 xcode4.3 autolayout
我有一个视图,需要以编程方式操作它的框架 - 它是一种包含其内容的文档视图,然后通过操作框架原点滚动并围绕超视图进行缩放.Autolayout在运行时与此斗争.
完全禁用自动布局似乎有点苛刻,因为它可以合理地用于处理其他视图的布局.看起来我可能想要的是某种"空约束".
Muh*_*Ali 168
我有同样的问题.但我已经解决了.
是的,您可以在运行时禁用特定的自动布局UIView
,而不是为Xcode 4.3及更高版本中默认设置的整个xib或storyboard禁用它.
设置translatesAutoresizingMaskIntoConstraints
到YES
,您设置子视图的帧之前:
self.exampleView.translatesAutoresizingMaskIntoConstraints = YES;
self.exampleView.frame = CGRectMake(20, 20, 50, 50);
Run Code Online (Sandbox Code Playgroud)
jms*_*617 49
我有一个类似的问题,Autolayout在运行时覆盖了我的一些框架设置(我有一个动态视图,在某些情况下推动了一个新的视图控制器...推动然后按Back将重置初始视图).
通过将我的操作代码放入viewDidLayoutSubviews
View Controller 中,我解决了这个问题.这似乎是在调用任何约束mojo之后调用,但是在viewDidAppear之前调用,所以用户不是更聪明的.
ban*_*isa 17
在iOS 8中,您可以将NSLayoutConstraint设置为活动与否.因此,如果我正在使用界面构建器,我将所有约束添加到OutletCollection,然后使用以下命令激活或停用:
NSLayoutConstraint.deactivateConstraints(self.landscapeConstraintsPad)
NSLayoutConstraint.activateConstraints(self.portraitConstraintsPad)
Run Code Online (Sandbox Code Playgroud)
我在这里使用它的特定应用程序在纵向和横向模式中具有不同的约束,并且我基于设备的旋转来激活/停用.这意味着我可以在界面构建器中为两个方向创建一些复杂的布局更改,并且仍然使用自动布局而不使用详细的自动布局代码.
或者您可以使用removeConstraints和addConstraints激活/停用.
我不知道这是否会对其他人有所帮助,但我写了一个类别来使这个方便,因为我发现自己做了很多.
UIView的+ DisableAutolayoutTemporarily.h
#import <UIKit/UIKit.h>
@interface UIView (DisableAutolayoutTemporarily)
// the view as a parameter is a convenience so we don't have to always
// guard against strong-reference cycles
- (void)resizeWithBlock:(void (^)(UIView *view))block;
@end
Run Code Online (Sandbox Code Playgroud)
UIView的+ DisableAutolayoutTemporarily.m
#import "UIView+DisableAutoResizeTemporarily.h"
@implementation UIView (DisableAutoResizeTemporarily)
- (void)resizeWithBlock:(void (^)(UIView * view))block
{
UIView *superview = self.superview;
[self removeFromSuperview];
[self setTranslatesAutoresizingMaskIntoConstraints:YES];
__weak UIView *weakSelf = self;
block(weakSelf);
[superview addSubview:self];
}
@end
Run Code Online (Sandbox Code Playgroud)
我这样使用它:
[cell.argumentLabel resizeWithBlock:^(UIView *view) {
[view setFrame:frame];
}];
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你.
小智 6
您可以在xib/storyboard中所需的UIView的用户定义的运行时属性中设置translatesAutoresizingMaskIntoConstraints
类型Boolean
值Yes.
如果您想对某些视图使用自动布局,则可以拆分为多个故事板。
归档时间: |
|
查看次数: |
81441 次 |
最近记录: |