注意:自问这个问题以来,事情已经发生了变化; 请看这里有一个很好的近期概述.
在自动布局之前,您可以通过存储框架,设置锚点和恢复框架来更改视图图层的锚点,而无需移动视图.
在自动布局世界中,我们不再设置框架,但是约束似乎不能将视图的位置调整回我们想要的位置.您可以破解约束以重新定位视图,但在轮换或其他调整大小事件时,这些会再次变为无效.
以下明智的想法不起作用,因为它创建了"无效的布局属性配对(左侧和宽度)":
layerView.layer.anchorPoint = CGPointMake(1.0, 0.5);
// Some other size-related constraints here which all work fine...
[self.view addConstraint:
[NSLayoutConstraint constraintWithItem:layerView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:layerView
attribute:NSLayoutAttributeWidth
multiplier:0.5
constant:20.0]];
Run Code Online (Sandbox Code Playgroud)
在这里我的目的是左边缘设置layerView,调整后的定位点来看,它的宽度加上20(我从上海华盈的左边缘要插入的距离)的一半.
是否可以在使用自动布局布局的视图中更改定位点而不更改视图的位置?我是否需要使用硬编码值并在每次旋转时编辑约束?我希望不是.
我需要更改锚点,以便在将变换应用于视图时,我获得正确的视觉效果.
使用自动布局约束我遇到了UIScrollView的麻烦.我有以下视图层次结构,通过IB设置约束:
- ScrollView (leading, trailing, bottom and top spaces to superview)
-- ContainerView (leading, trailing, bottom and top spaces to superview)
--- ViewA (full width, top of superview)
--- ViewB (full width, below ViewA)
--- Button (full width, below ViewB)
Run Code Online (Sandbox Code Playgroud)
ViewA和ViewB的初始高度为200点,但可以通过单击将其垂直扩展到400点的高度.ViewA和ViewB通过更新其高度约束(从200到400)进行扩展.这是相应的片段:
if(self.contentVisible) {
heightConstraint.constant -= ContentHeight;
// + additional View's internal constraints update to hide additional content
self.contentVisible = NO;
} else {
heightConstraint.constant += ContentHeight;
// + additional View's internal constraints update to show additional content
self.contentVisible = YES; …Run Code Online (Sandbox Code Playgroud) 我有autolayout(也许)和我的scrollview的问题!
我的问题

然后我推到另一个视图
然后我回去看看它的滚动视图,我无法滚动到最高点.(我在滚动视图的弹跳中看到它)

有谁能够帮我?
我有一个基于自动布局(约束)的应用程序,并注意到方向更改后的tableview存在问题.repro步骤如下(我有一个非常基本的repro应用程序 - 带有tableview和添加新项目的添加按钮).
1要添加的代码
- (IBAction)onAdd:(id)sender {
count ++;
[self.tableView insertRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:count-1 inSection:0]] withRowAnimation:UITableViewRowAnimationBottom];
}
Run Code Online (Sandbox Code Playgroud)
[2]浮动表视图

关于如何解决这个问题的任何想法?另外,我如何判断这是否是已知问题或我应该向Apple报告的内容?
我觉得我已经触及了阻止这个的每一个可能原因,但是我的故事板中有一个UIScrollView连接了一个插座,在viewDidLoad中我设置了contentSize以便我可以滚动(比框架大小更大)!
但是,无论我改变什么,我都无法滚动!我的滚动视图中有几个文本字段并且启用了弹跳,因此我可以看到在使用我的子视图测试其上下移动时,但无论我将contentSize设置为什么,我都无法滚动.
我可能遗失的任何东西/应该检查?这是UIScrollView在故事板中使用的已知问题吗?
甚至更奇怪的是,我可以做这样的事情:
[scrollView setBackgroundColor:[UIColor blueColor]];我有一个蓝色滚动视图!但设置内容大小失败.
我唯一的代码(否则scrollview只是放入storyboard视图控制器):
-(void)viewDidAppear:(BOOL)animated
{
[scrollView setContentSize:CGSizeMake(320, 640)];
}
Run Code Online (Sandbox Code Playgroud)
记录的帧,按预期出现:
width: 320.00
height: 504.00
Run Code Online (Sandbox Code Playgroud)
原来在我的故事板中删除滚动视图的任何子视图让它滚动得很好.如果我通过故事板添加任何子视图,即使是空白的全新UIButton,它也不会应用contentSize/allow滚动.

考虑UIScrollView使用单个子视图.子视图UIImageView具有以下大小限制:
UIScrollView.UIImageView.预计宽度UIImageView将大于UIScrollView的宽度,因此需要滚动.
图像可能在viewDidLoad(如果缓存)或异步期间设置.
如何使用autolayout实现上述功能,尽可能多地使用Interface builder?
根据这个答案,我配置了我的笔尖:
UIScrollView被钉到它的父的边缘.UIImageView被钉到的边缘UIScrollView.UIImageView有一个占位符固有大小(以避免滚动的内容大小歧义错误)正如预期的那样,结果是UIImageView大小UIImage与UIScrollView水平和垂直的大小相同(因为图像大于UIScrollView).
然后我尝试了各种不起作用的东西:
UIImageView.zoomScale加载图像后设置.没有明显的效果.以下代码完全按照我的意愿执行,尽管没有自动布局或界面构建器.
- (void)viewDidLoad
{
{
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:scrollView];
self.scrollView = scrollView;
}
{
UIImageView …Run Code Online (Sandbox Code Playgroud) 我有一个UIScrollView在Interface Builder创建了一堆UITextView和UIImageView对象已经添加.我把它连接到一个IBOutlet,并在-(void)viewDidLoad我设置其内容大小1200x2000.用户交互已启用,多点触控,滚动已启用并显示垂直和水平滚动指示器均已设置为YES.当我在iOS模拟器中启动应用程序时,它不会滚动.可能是这种行为的原因是什么?
目标:
有一个UIWebView具有相同的宽度,因为它是上海华,这是一种UIScrollView使用自动布局约束.
码
NSLayoutConstraint *makeWidthTheSameAsScrollView =[NSLayoutConstraint
constraintWithItem:self.questionWebView
attribute:NSLayoutAttributeWidth
relatedBy:0
toItem:self.masterScrollView
attribute:NSLayoutAttributeWidth
multiplier:1.0
constant:0];
[self.view addConstraint:makeWidthTheSameAsScrollView];
NSLog(@"The width of questionWebView *AFTER* adding the constrain is: %f", self.questionWebView.frame.size.width);
NSLog(@"The width of scrollView *AFTER* adding the constrain is: %f", self.masterScrollView.frame.size.width);
Run Code Online (Sandbox Code Playgroud)
目前的结果
当我记录self.questionWebView(the UIWebView)的宽度时,当应用autolayout约束时,它的宽度不会改变.
问题
PS我知道这是对苹果的建议放置UIWebView在一个UIScrollView,但我已经关闭了滚动的能力,UIWebView使用属性self.questionWebView.userInteractionEnabled = NO;.目前使用UIWebView是我显示HTML表格的最佳策略.
我有一个UILabel内部UIScrollView,我试图自言自语.我想使用AutoLayout进行布局配置.UILabel当它不在里面时,这个词完美地包裹UIScrollView.我只需要将行数设置为0并将换行模式设置为自动换行.
但是,当我把UILabel内部放入时UIScrollView,包装词就不再起作用了.我已经使用Interface Builder和Autolayout检查了" UIScrollView中的动态UILabel高度和AutoLayout "和" UIZcrollView中的UILabel大小? ",但这些问题都没有帮助我的答案.
我已经建立了一个测试项目,说明如果有人想看一下我正在谈论的内容.
我正在autolayout改变我的身高scrollview.我加一些subviews到scrollview那里我手动增加内容大小.但当我得到一个我要改变高度的事件时,内容大小为零.
这是代码:
-(void) addTag:(NSString *)tagName {
...
[button addTarget:self action:@selector(tagPressed:) forControlEvents:UIControlEventTouchUpInside];
[self setContentSize:CGSizeMake(self.frame.size.width, self.contentSize.height+60)];
[self.items addObject: button];
NSLog(@"content height: %0.2f", self.contentSize.height);
}
Run Code Online (Sandbox Code Playgroud)
控制台输出:
2013-04-18 18:23:06.106 TouchSelectApp[19944:c07] content height: 120.00
Run Code Online (Sandbox Code Playgroud)
这里我输出contentSize:
- (void)tagPressed:(UIButton *)sender {
NSLog(@"1 content height: %0.2f", self.contentSize.height);
...
}
Run Code Online (Sandbox Code Playgroud)
控制台显示:
2013-04-18 18:17:24.747 TouchSelectApp[19944:c07] 1 content height: 0.00
Run Code Online (Sandbox Code Playgroud)
我不知道为什么内容高度设置为零.帮我!
更新:这是我想解决的问题.
我有一个带按钮的滚动视图.最初它只显示一个按钮.按下按钮时,将调用tagPressed:.Tag Pressed更改高度以显示所有按钮.然后,当用户选择按钮时,滚动视图的高度将更改为原始高度,并且偏移量将设置为按钮的原点.以下代码有效,但动画完全错误.如果我更改偏移量并在动画块之前,则只将偏移量设置为零.
- (void)tagPressed:(UIButton *)sender {
CGPoint p;
float maxHeight = self.items.count * 60;
if (self.height.constant == maxHeight) {
self.height.constant = …Run Code Online (Sandbox Code Playgroud) ios ×9
uiscrollview ×8
autolayout ×7
objective-c ×6
iphone ×4
calayer ×1
cocoa-touch ×1
ios6 ×1
ipad ×1
storyboard ×1
uiimageview ×1
uilabel ×1
uitableview ×1
uiwebview ×1
xcode ×1