有一个问题:我设置了一个名为ZHLockView的自定义视图。我把它放在故事板中,然后设置约束。但是我无法在- (id)initWithCoder:(NSCoder *)aDecoder
中获得正确的宽度,它总是320,我该怎么做以获得正确的宽度?
最后我知道- (void)layoutSubviews
,我可以得到合适的宽度,但它会走两倍。有更好的主意吗?
答案 0 :(得分:0)
请注意,您的宽度为320,因为您的视图在故事板上具有该大小。
如果视图的宽度等于superview,它实际上又等于设备的宽度,则可以使用以下代码随时获取视图的宽度,而不必担心写入的位置。
Swift : -
CGFloat width = CGRectGetWidth(UIScreen.mainScreen.bounds);
CGFloat height = CGRectGetHeight(UIScreen.mainScreen.bounds);
Objective-C : -
CGFloat width = CGRectGetWidth([[UIScreen mainScreen] bounds]);
CGFloat height = CGRectGetHeight([[UIScreen mainScreen] bounds]);
希望你明白并帮助你.. :)
答案 1 :(得分:0)
视图将在第一次开始时加载xib中的值,接下来当autolayout引擎进行第一次开始时,将根据设置的约束将其设置为新值。
为什么你需要知道尺寸? Autolayout不关心它。
当布局引擎需要更新时,会调用-layoutSubviews
,-viewWillLayout
,-viewDidLayout
,这可能意味着在显示视图之前的不同时间。
答案 2 :(得分:0)
代码在这里
objc
#define KScreenWidth [UIScreen mainScreen].bounds.size.width
CGFloat height = 0;
CGFloat margin = (KScreenWidth - columnCount * btnW) / (columnCount + 1);
for (int i = 0; i < btnCount; i++) {
int row = i / columnCount;
int column = i % columnCount;
CGFloat btnX = margin + column * (btnW + margin);
CGFloat btnY = row * (btnW + margin);
height = btnH + btnY;
ZHButtonView *button = [[ZHButtonView alloc] initWithFrame:CGRectMake(btnX, btnY, btnW, btnH)];
button.userInteractionEnabled = NO;
button.currentIndex = i;
[button setBackgroundImage:[UIImage imageNamed:@"gesture_node_normal"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"gesture_node_highlighted"] forState:UIControlStateSelected];
[self addSubview:button];
}