使用autolayout将自定义UIView添加到iCarousel

时间:2014-12-08 11:21:07

标签: ios objective-c iphone icarousel

是否可以将带自动布局的自定义UIView添加到iCarousel?

如果我在iCarousel委托方法

中创建自定义视图时尝试设置约束
-(UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSUInteger)index reusingView:(UIView *)view

应用程序崩溃,因为在将视图添加到superview时可以添加约束,但此时它不是。

我有自定义视图的新xib。问题是我的自定义视图太大而无法容纳iPhone上的iCarousel,我在自定义视图中排列视图时没有问题但是我在iCarousel中调整我的自定义视图有问题,因为我不知道在哪里设置约束,因为悲伤的约束不能在" viewForItemAtIndex"中设置。因为视图在那时没有超视图

2 个答案:

答案 0 :(得分:3)

您应该尝试向iCarousel视图添加约束,而不是为viewForItemAtIndex添加约束。如果视图中的组件需要约束,则可能需要在具有约束的新xib文件中创建视图,并在viewForItemAtIndex方法中调用该视图。我遇到了同样的问题并以这种方式解决了。

- (UIView *)carousel:(iCarousel *)carousel viewForItemAtIndex:(NSInteger)index reusingView:(UIView *)view
{
  CTProductDetailsInMapView *productView;

  if (view == Nil)
   {
     NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CTProductDetailsInMapView" owner:self options:nil];
     productView = (CTProductDetailsInMapView *) [nib objectAtIndex:0];
   }
  else
    productView = (CTProductDetailsInMapView *)view;
}
return productView

}

CTProductDetailsInMapView是在接口文件中实现的UIView的子类。这里所有组件都有约束并且可以正常工作。

答案 1 :(得分:0)

我的解决方案是将frame.size.width / height设置为:

// current view is view from xib
// don't set frame, just sizes
currentView.frame.size.width = 100 // or other value
currentView.frame.size.height = 100 // or other value

return currentView

希望对某人有帮助