iOS:框架放置不正确

Posted

技术标签:

【中文标题】iOS:框架放置不正确【英文标题】:iOS: Incorrect frame placement 【发布时间】:2012-03-29 04:40:02 【问题描述】:

这是一段代码,目前让我发疯。它是一个 UIView,带有一个 AVPlayerLayer(作为子层)和一个 UITableView(作为子视图)。长按电影应该隐藏电影并显示表格。再次长按桌子应该隐藏桌子并重新显示电影。

playerView3 = [[UIView alloc] init];
[playerView3 addGestureRecognizer:tap3];
[playerView3 addGestureRecognizer:longPress3];
[playerView3 setFrame:CGRectMake(682, 0, 341, 768)];
[self.view addSubview:playerView3];    

[self table3:CGRectMake(682, 0, 341, 768)];
[playerView3 addSubview:table3];
[table3 setHidden:YES]; 
[table3 setTag:3];

NSURL *url3 = [[NSBundle mainBundle] URLForResource:@"3" withExtension:@"MOV"];
AVURLAsset *asset3 = [AVURLAsset URLAssetWithURL:url3 options:nil];
AVPlayerItem *playerItem3 = [AVPlayerItem playerItemWithAsset:asset3];
player3 = [AVPlayer playerWithPlayerItem:playerItem3];
[player3 setActionAtItemEnd:AVPlayerActionAtItemEndNone];
playerLayer3 = [AVPlayerLayer playerLayerWithPlayer:player3];
[playerView3.layer addSublayer:playerLayer3];
playerLayer3.frame = playerView3.layer.bounds;
playerLayer3.videoGravity = AVLayerVideoGravityResizeAspect;

长按的动作方法如下: if (!(sender.state == UIGestureRecognizerStateBegan)) 返回;

if([playerLayer3 isHidden])
    
    [playerLayer3 setHidden:NO];
    [table3 setHidden:YES];

else

    [playerLayer3 setHidden:YES];
    [table3 setHidden:NO];
  

请注意,我为表格和电影提供了相同的 frame 值。但我把它们放在屏幕的不同区域!有人可以指导我出了什么问题吗?

以下是一些截图:

长按之前的电影,位于 (341, 0, 341, 768) 的预期位置

长按后,表格在这里(在一个意想不到的位置),尽管与电影具有相同的帧值 (341, 0, 341, 768)

现在,如果我有一个新的电影帧值 (682, 0, 341, 768):

在长按后甚至看不到此帧 (682, 0, 341, 768) 的表格:

非常感谢任何帮助!

【问题讨论】:

【参考方案1】:

框架是相对于它的超级视图。您已将 playerview3 添加到 self.view 并将 table3 添加到 playerview3。

如果你想保持框架不变,你应该只将表格添加到 self.view。这意味着

[playerView3 addSubview:table3];

上面的行应该用

[self.view addSubview:table3];

如果你想将table3添加到playerView3,那么它的frame应该从0,0开始,而不是从682,0开始。

希望它会有所帮助。

【讨论】:

该死!这是对的。我应该看到更多!非常感谢。【参考方案2】:

tableview 是 playerview 的子视图,所以它的 frame 是基于 playerview 的 frame。要让它们出现在同一个空间中,您需要将 tableview 添加为 self.view 的子视图或手动调整框架。

[self.view addSubview:table3];

【讨论】:

谢谢! Apurv 的答案在你之前,所以我接受了它并赞成你的。

以上是关于iOS:框架放置不正确的主要内容,如果未能解决你的问题,请参考以下文章

UIView 使用自动布局调整大小,但在运行时获取其帧大小不正确 ios

ios - 返回隐藏/显示元素的屏幕时,按钮未正确放置

ios UITextView 显示不正确(错误?)

已设置约束但视图未正确放置

从 av 基础框架工作为 ios 开发自定义相机应用程序时,Camara 预览显示不正确?

具有自动布局的 iOS UIScrollView 未正确居中