- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
当继承 UIView
时,我通常将所有初始化和布局代码放在它的 init
方法中。但我被告知布局代码应该通过覆盖 layoutSuviews
来完成。有一个 post在 SO 上解释了何时调用每个方法,但我想知道如何在实践中使用它们。
我目前将我所有的代码都放在 init
方法中,如下所示:
MyLongView.m
- (id)initWithHorizontalPlates:(int)theNumberOfPlates
{
self = [super initWithFrame:CGRectMake(0, 0, 768, 1024)];
if (self) {
// Initialization code
_numberOfPlates = theNumberOfPlates;
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.frame];
[scrollView setContentSize:CGSizeMake(self.bounds.size.width* _numberOfPlates, self.bounds.size.height)];
[self addSubview:scrollView];
for(int i = 0; i < _numberOfPlates; i++){
UIImage *img = [UIImage imageNamed:[NSString stringWithFormat:@"a1greatnorth_normal_%d.jpg", i+1]];
UIImageView *plateImage = [[UIImageView alloc] initWithImage:img];
[scrollView addSubview:plateImage];
plateImage.center = CGPointMake((plateImage.bounds.size.width/2) + plateImage.bounds.size.width*i, plateImage.bounds.size.height/2);
}
}
return self;
}
这是通常的任务:设置 View 的框架、初始化 ivar、设置 ScrollView 、初始化 UIImage、将它们放入 UIImageView 中、进行布局。
我的问题是:哪些应该在init
中完成,哪些应该在layoutSubviews
中完成?
最佳答案
您的 init 应该使用所需的数据创建所有对象。理想情况下,您在 init 中传递给它们的任何帧都应该是它们的起始位置。
然后,在 layoutSubviews: 中,您更改所有元素的框架以将它们放置在应有的位置。在 layoutSubviews: 中不应进行分配或初始化,只能更改其位置、大小等...
关于ios - UIView:layoutSubviews 与 initWithFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13177251/
代码: class ViewController: UIViewController{ var button = CustomButton() override func viewDi
我正在尝试重新定位我的 UIBarButtonItem,使其边缘紧靠 UINavigationBar 的顶部和右侧。我找到了 this accepted answer关于如何做到这一点,但我真的不明白
我刚刚在iOS版的Facebook SDK中看到,他们在layoutSubviews方法的结尾而不是开头调用[Super layoutSubviews];。。据我所知,我们应该始终把它作为第一条线来做
我有一些 Layer1作为子层附加到我的自定义 View 的根层。 然后,当我改变了 Layer1 的变换时,发生了一件有趣的事情。内touchesMoved , layoutSubviews 被调用
我有一个包含 2 个 subview 的 View - collectionView 和自定义 View 。我想设置一个操作在布置 2 个 View 后运行,但layoutSubViews 运行了两次
我有一个 View (LSTabBarView),它支持使用以下方法插入/删除新元素: - (void)insertItem:(LSTabItem *)item atIndex:(NSUInteger
我正在用 Swift 开发一个 iOS 应用程序,我有一个带有自定义 UITableViewCells 的 UITableView,通过覆盖 在单元格的左侧和右侧有间距layoutSubviews()
对于 Xcode 6 和 iOS8,我的应用程序出现了奇怪的问题。问题出在我用 xib 文件制作的自定义 UITableViewCell 中。在 iOS8 模拟器上,layoutSubviews 方法
问题“When does layoutSubviews get called?”中列出了几种情况: 调整了父 View 的大小 设备旋转 还有吗? 如果不需要处理,对于UITableView,我们可以
我希望标签的字体大小与屏幕大小成正比。我已将 UILabel 类子类化以实现此目的: @IBDesignable class MyCustomLabel: UILabel { override
当我的主视图旋转时,我想重新安排 subview ,所以在我的 ViewController 中,我重写了 willAnimateRotationToInterfaceOrientation:(UII
正如标题所说:我创建一个空的 UIView 子类并向其中添加一个 subview ,创建一个空的layoutSubviews 方法并在其中添加一个断点。然后我构建项目,并在layoutSubviews
我正在将我的 iOS 6 应用程序转换到 iOS 7 并且遇到了一些问题。 在 iOS 6 中,将调用不再调用的方法。 我的类继承自 UIAlertView。 例如: - (void)layoutSu
我处于两难境地,使用哪种方法来设置自定义 UIViews 的框架,其中包含许多 subview ,并且仍然有动画并自动调整到旋转。当我创建一个新的 View Controller 时,我通常会在 lo
我有许多自定义 UIView。 我经常发现自己在自定义 View 的初始化中初始化属性,但我也在那里设置了框架。 我通常将 layoutSubviews 留空。如果我不希望我的 View 边界发生变化
我创建了一个自定义 UITableViewCell 类。在该类中,我根据单元格内部的图像调整单元格的高度。 - (void)layoutSubviews { [super layoutSubv
我正在为我的应用程序创建一个设置 View ,该 View 中有一个 UITableView。我正在创建自定义单元格以满足我的需要,但我遇到了问题 - 只有最后一个单元格正在获取 [layoutSub
我在我的 ViewController 中实现了 commitEditingStyle 方法,这样我就可以在适当的单元格上滑动以将其删除。但是当我在 Debug模式下在一个单元格上滑动时,layout
使用 Xcode 4.2/iOS5.0 我有一个 viewController 和一个关联的 viewController.xib。 viewController 被设置为 .xib 文件的所有者。它
我正在尝试为某些 subview 创建自定义布局。我的文件是一个 ViewController,因此我必须将其 View 称为 self.view。 subview 是 self.view 的 sub
我是一名优秀的程序员,十分优秀!