【问题标题】:how to create xib subview at the center of tableview swift如何在tableview swift的中心创建xib子视图
【发布时间】:2015-09-05 02:53:36
【问题描述】:

我有 tableview,我为它创建了自定义 xib uiview 作为“detailview”。当点击表格视图单元格时,我想在滚动区域的中心显示这个细节视图。我可以展示这个视图,但不能集中它。当我手动将值设置为框架时,子视图将位于中心(大约)但是当我点击底部的单元格时,子视图出现在页面顶部,并且当我滚动表格视图时它也在移动。

请帮我在滚动区域的中心显示这个视图并修复

这是我的代码;

详细视图:

class TopTenDetailView: UIView {

      var screenWidth:CGFloat = UIScreen.mainScreen().bounds.width*0.08
      var screenHeight :CGFloat = UIScreen.mainScreen().bounds.height*0.08

      class func instanceFromNib() -> UIView {
            return UINib(nibName: "TopTenDetail", bundle: nil).instantiateWithOwner(nil, options: nil)[0] as! UIView
      }

      override func awakeFromNib() {
            super.awakeFromNib()
            self.layer.cornerRadius=10

            let testFrame : CGRect = CGRectMake(screenWidth,screenHeight,320,480)
            self.frame = testFrame
            self.userInteractionEnabled=true
      }

      @IBAction func close(sender: UIButton) {
            self.hidden=true
      }
}

还有TableViewController的方法;

      override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
             var detailView = TopTenDetailView.instanceFromNib
             self.view.addSubview(detailView())
      } 

【问题讨论】:

    标签: swift tableview xib subview centralized


    【解决方案1】:

    这种设置方式有很多问题,如果它真的按预期工作,我会感到惊讶。

    更好、更简单的设置使用OverFullScreen 演示样式,如下所示:

    • 为您的详细视图创建一个单独的UIViewController,我们称之为DetailViewController 使用Interface Builder。确保将背景颜色设置为 CLEAR
    • 将一个 segue 从包含 UITableView 的“基础”UIViewController 连接到 DetailViewController,并为 segue 命名。我们称之为 'detailSegue' ,基本上是从一个视图控制器拖到另一个。确保您不是从视图中拖动,而是从视图控制器顶部的黄色图标中拖动。您已在 Interface Builder 中完成。

    好的,现在是代码:

        // MARK : - UITableViewDelegate
        func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
            self.performSegueWithIdentifier("detailSegue", sender: self)
        }
    
        // MARK: - segues
        override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
            if let vc = segue.destinationViewController as? UIViewController{
                vc.modalPresentationStyle = .OverFullScreen
    
            }
        }
    

    OverFullScreen 演示样式使用正确的UIViewController 模态segue,但在呈现的UIViewController 下可见。

    然后,您可以使用 Interface Builder 和自动布局在 DetailViewController 上进行任何您想要的布局,而无需在运行时对布局进行 hacky 匹配计算。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-31
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多