UIView不在给定的框架中显示

时间:2016-01-14 04:24:12

标签: ios swift uitableview uiview

我正试图在swift中创建两个下拉菜单。到目前为止,它由一个UIView(使用NIB创建)组成,然后在代码中创建两个UIView,用作两个UITableView的包装器,当按下下拉菜单时将显示这两个UITableView。我已经让左手菜单(排行榜菜单)完美地工作但是当我尝试创建第二个菜单时,按下第二个菜单时它不会显示。出于某种原因,如果帧的x值超过194,则不显示,我的猜测是第二个菜单被添加为第一个的子视图,但由于第一个边界只有194个宽,所以它超出了为该视图显示的边界。我将提供一些代码来展示我想要做的事情。感谢您的回复!

let leaderboardMenuFrame = CGRect(x: 0.0, y: 0.0, width: 194.0, height: leaderboardTableHeight)
let rankingMenuFrame = CGRect(x: 195.0, y: 0.0, width: 92.0, height: rankingTableHeight)

// Set up leaderboard DropdownMenu
self.leaderboardMenuWrapper = UIView(frame: leaderboardMenuFrame)
self.leaderboardMenuWrapper.clipsToBounds = true
self.leaderboardMenuWrapper.autoresizingMask = UIViewAutoresizing.FlexibleWidth.union(UIViewAutoresizing.FlexibleHeight)

// Set up ranking DropdownMenu
self.rankingMenuWrapper = UIView(frame: rankingMenuFrame)
self.rankingMenuWrapper.clipsToBounds = true
self.rankingMenuWrapper.autoresizingMask = UIViewAutoresizing.FlexibleWidth.union(UIViewAutoresizing.FlexibleHeight)

//Init Leaderboard menu table view
self.leaderboardMenuTableView = DropDownTableView(frame: CGRectMake(leaderboardMenuFrame.origin.x, leaderboardMenuFrame.origin.y + 0.5, leaderboardMenuFrame.width, leaderboardMenuFrame.height+300))

//Init Ranking menu table view
self.rankingMenuTableView = DropDownTableView(frame: CGRectMake(rankingMenuFrame.origin.x, rankingMenuFrame.origin.y + 0.5, rankingMenuFrame.width, rankingMenuFrame.height+300))

self.leaderboardMenuWrapper.addSubview(self.leaderboardMenuTableView)
self.rankingMenuWrapper.addSubview(self.rankingMenuTableView)

view = loadViewFromNib()
view.frame = bounds
view.autoresizingMask = [UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight]


// Add Menu View to container view
view.addSubview(self.rankingMenuWrapper)         
view.addSubview(self.leaderboardMenuWrapper)

addSubview(view)

1 个答案:

答案 0 :(得分:1)

我想问题是这行代码:

//Init Ranking menu table view
self.rankingMenuTableView = DropDownTableView(frame: CGRectMake(rankingMenuFrame.origin.x, rankingMenuFrame.origin.y + 0.5,   rankingMenuFrame.width, rankingMenuFrame.height+300))

rankingMenuTableView的来源应为x = 0。但是,当您使用rankingMenuFrame初始化frame rankingMenuTableVieworigin x = 195rankingMenuTableView。这会将bounds推出//Init Ranking menu table view self.rankingMenuTableView = DropDownTableView(frame: CGRectMake(0, rankingMenuFrame.origin.y + 0.5, rankingMenuFrame.width, rankingMenuFrame.height+300))

所以实现你想要的正确方法应该是:

        [DllImport("user32.dll")]
        static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);

        private const int MOUSEEVENTF_MOVE = 0x0001;

        public static void Move(int xDelta, int yDelta)
        {
            mouse_event(MOUSEEVENTF_MOVE, xDelta, yDelta, 0, 0);
        }

希望这有帮助。