iOS8 UIView宽度320

时间:2015-05-20 02:54:15

标签: ios uiview storyboard constraints

有一个问题:我设置了一个名为ZHLockView的自定义视图。我把它放在故事板中,然后设置约束。但是我无法在- (id)initWithCoder:(NSCoder *)aDecoder中获得正确的宽度,它总是320,我该怎么做以获得正确的宽度?

最后我知道- (void)layoutSubviews,我可以得到合适的宽度,但它会走两倍。有更好的主意吗?

3 个答案:

答案 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];
}