如何遍历UIView的所有子视图及其子视图和子视图?
请注意,对于googlers来说,这个QA已经过时了六年!
正如下面的Micky和其他人所提到的,现在每天都在iOS中使用Containers.
我有一个控制许多子视图的ViewController.当我单击其中一个按钮时,我初始化另一个视图控制器并将其视图显示为该视图的子视图.但是子视图超出了子视图框架的边界,并且实际上填满了整个屏幕.
可能有什么不对?我认为问题是UIViewController的视图有一个框架(0,0,320,460),因此填充整个屏幕(尽管只有在子视图边界内触摸时它才会接收到触摸事件).如何调整框架大小以适合子视图.
简而言之,我需要帮助将viewcontroller的视图作为子视图添加到另一个viewcontroller的视图中.
谢谢!
我通常喜欢在界面构建器中创建和设计我的uiviews.有时我需要在xib中创建一个可以在故事板中的多个视图控制器中重用的视图.
我使用以下代码更改UIView的位置,而不更改视图的大小.
CGRect f = aView.frame;
f.origin.x = 100; // new x
f.origin.y = 200; // new y
aView.frame = f;
Run Code Online (Sandbox Code Playgroud)
是否有更简单的方法来改变视图位置?
我有一个UIView,它不在UIScrollView中.我想在键盘出现时向上移动我的视图.在我尝试使用此解决方案之前:如何在键盘存在时使UITextField向上移动?.
它工作正常.但是在文本字段中插入数据后,它会转到另一个视图,当我回到这个页面时,它只是跳跃,我看不到我的文本字段.有没有更好的解决方案来解决这个问题?
我有一个UIView,通过几个约束放在屏幕上.一些约束由superview拥有,其他约束由其他祖先拥有(例如,可能是UIViewController的view属性).
我想删除所有这些旧约束,并使用新约束将其置于新的位置.
如果不为每个约束创建一个IBOutlet并且必须记住哪个视图拥有所述约束,我该怎么做呢?
详细说明,天真的方法是为每个约束创建一堆IBOutlet,然后涉及调用代码,例如:
[viewA removeConstraint:self.myViewsLeftConstraint];
[viewB removeConstraint:self.myViewsTopConstraint];
[viewB removeConstraint:self.myViewsBottomConstraint];
[self.view removeConstraint:self.myViewsRightConstraint];
Run Code Online (Sandbox Code Playgroud)
这段代码的问题在于,即使在最简单的情况下,我也需要创建2个IBOutlet.对于复杂的布局,这可以轻松达到4或8个所需的IBOutlet.此外,我需要确保在正确的视图上调用我的删除约束的调用.例如,想象一下,myViewsLeftConstraint拥有viewA.如果我不小心打电话[self.view removeConstraint:self.myViewsLeftConstraint],什么都不会发生.
注意:方法constraintsAffectingLayoutForAxis看起来很有前景,但仅用于调试目的.
更新:很多我收到处理问题的答案self.constraints,self.superview.constraints或一些人的变种.这些解决方案不起作用,因为这些方法只返回视图所拥有的约束,而不是影响视图的约束.
要澄清这些解决方案的问题,请考虑以下视图层次结构:
现在假设我们创建了以下约束,并始终将它们附加到最近的共同祖先:
现在假设我们要删除所有影响的约束Me.任何适当的解决方案应该删除[C0,C1,C2,C3,C4],没有别
如果我使用self.constraints(自我就是我),我会得到[C0,C1,C7],因为这些是我拥有的唯一约束.显然,删除它是不够的,因为它丢失了[C2,C3,C4].此外,它正在C7不必要地删除.
如果我使用self.superview.constraints(自我就是我),我会得到[C2,C5],因为那些是父拥有的约束.显然我们无法删除所有这些因为C5完全无关Me.
如果我使用grandfather.constraints,我会得到[C3,C4,C6].同样,我们无法删除所有这些,因为 …
是否可以确定我UIView的用户是否可见?
我的视图被subview多次添加到一个Tab Bar Controller.
此视图的每个实例都有一个NSTimer更新视图的实例.
但是,我不想更新用户不可见的视图.
这可能吗?
谢谢
我在界面构建器中有一个简单的tableViewCell构建.它包含一个包含图像的UIView.现在,当我选择单元格时,会显示默认的蓝色选择背景,但我的UIView的backgroundColor消失了.
我的UITableViewCell的实现文件没有做任何特别的事情.它只是init和&返回self,我在setSelected中所做的就是调用super.
如何在选择tableView时显示我的UIView backgroundColor?
我正在研究一个opengl项目.我使用了一些图像(2个用于xy刻度)和标签(8个)在屏幕上显示刻度.我的第一个观点是tableview我去的地方openglView.但每当我回去从openglView到tableView它给我这个错误和应用程序崩溃.
"这个UIView似乎是NSISVariable的代表,它对此一无所知.这是一个内部的UIKit错误."
有什么建议?这是因为我包含了太多的UI元素,除了那些图像和标签我也使用了一些按钮.而且我也适用affineTransform于那些图像和标签以及一个按钮.
确切的错误是:
2013-01-31 12:20:18.743 EMtouch[50496:12203] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '{ Rows:
UILayoutContainerView:0x9835660.Height == 480 + 1*0x7e53030.marker + 1*0x7e546c0.marker
UILayoutContainerView:0x9835660.Width == 320 + 1*0x7e52f90.marker + 1*0x7e54330.marker
UILayoutContainerView:0x9835660.minX == 0 + 1*0x7e52ca0.marker + -0.5*0x7e52f90.marker
UILayoutContainerView:0x9835660.minY == 0 + 1*0x7e52fd0.marker + -0.5*0x7e53030.marker
UINavigationTransitionView:0x9837ea0.Height == 480 + 1*0x7e51bf0.marker + 1*0x7e53030.marker + 1*0x7e546c0.marker
UINavigationTransitionView:0x9837ea0.Width == 320 + 1*0x7e519c0.marker + 1*0x7e52f90.marker + 1*0x7e54330.marker
UINavigationTransitionView:0x9837ea0.minX == 0 + 1*0x7e51940.marker + …Run Code Online (Sandbox Code Playgroud) 我想将UIView转换为图像并将其保存在我的应用程序中.有人可以请告诉我如何截取视图的截图或将其转换为图像,以及将其保存在应用程序(不是相机胶卷)的最佳方法是什么?以下是视图的代码:
var overView = UIView(frame: CGRectMake(0, 0, self.view.frame.width/1.3, self.view.frame.height/1.3))
overView.center = CGPointMake(CGRectGetMidX(self.view.bounds),
CGRectGetMidY(self.view.bounds)-self.view.frame.height/16);
overView.backgroundColor = UIColor.whiteColor()
self.view.addSubview(overView)
self.view.bringSubviewToFront(overView)
Run Code Online (Sandbox Code Playgroud) uiview ×10
ios ×5
iphone ×4
objective-c ×3
autolayout ×2
constraints ×1
loops ×1
nstimer ×1
opengl-es ×1
screenshot ×1
subview ×1
swift ×1
uikit ×1
uistoryboard ×1
uitableview ×1
visibility ×1
xcode ×1
xib ×1